Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、2023年2月24日にMIGUEL HERNÁNDEZC が投稿したブログ(https://sysdig.com/blog/chatgpt-falco-contributor)を元に日本語に翻訳・再構成した内容となっております。
OpenAI ChatGPTはFalcoのようなオープンソースプロジェクトのコントリビューターになれるか?GitHub Copilotはこれで終わりなのでしょうか?
ChatGPTは、先日おばあちゃんが友達に話しているのを耳にしたほど、流行しています。このAIが実世界で使われることが多くなってきています。そこで、私たちは考えました。
インキュベーションレベルのプロジェクトとしてCNCFに参加した最初のランタイムセキュリティプロジェクトであるFalcoは、コントリビューターを必要としています。OpenAIのChatGPT言語モデルは、Falcoのセキュリティルールやプラグインを書くことができ、コントリビューターとなれるだろうか?
冗談はさておき、この記事では、組織が効果的かつ効率的なセキュリティルールを作成するためのツールとしてのChatGPTの実行可能性を探ります。Falcoのそれらの新しいルールは、彼らのコンテナやホストが潜在的な脅威から保護されていることを保証するでしょうか?
まず始めに、ランタイムセキュリティとは何なのかを理解する必要があります。検索エンジンを使用するのではなく、プロセスをスピードアップするために、ChatGPTに質問することにします。
ChatGPTによると:
「ランタイムセキュリティは、ソフトウェアシステムを実行中にリアルタイムで監視・保護し、セキュリティ上の脅威を検知・防御し、被害の拡大を防ぐための緩和策を実施することである。ランタイムセキュリティの目標は、セキュリティ上の脅威や脆弱性が悪用され、被害が発生する前に特定し、対応することです。」
良い定義ですが、さらに深く掘り下げて見ましょう。
ChatGPTでは、オープンソースプロジェクト「Falco」をわかりやすくまとめました。
Falco.orgのランディングページから情報をコピーするのではなく、ChatGPTは、Linuxカーネル内で収集したデータからセキュリティ脅威を検出する際に、FalcoがeBPFを利用して低オーバーヘッドを達成する方法として有用なコンテキストを提供しました。
この時点で、私たちは、ランタイムセキュリティとは何か、そして、異常なランタイムセキュリティ問題を検 出するために Falco がどのように使用できるかを理解しました。さて、オープンソースのFalcoに慣れたところで、ChatGPTに有用なFalcoのルールを書いてもらいましょう。
では、言語モデルがOSS Falcoのセキュリティルールを書けるかどうか、ChatGPTに尋ねてみましょう。
以下のスクリーンショットから、ChatGPTはFalcoコミュニティへの有用なコントリビューターのように見えますか?
この時点で、私たちは返された答えに満足しています。
正しくフォーマットされたFalcoのルールがあり、言語モデルはルールがどのように機能するかについて、いくつかの追加されたコンテキストを返しました。
唯一の懸念は、彼らが作成した最初のルールが、Falcoコミュニティのルールフィードにすでに存在するルールと類似していることです:
- rule: Terminal shell in container
desc: A shell was used as the entrypoint/exec point into a container with an attached terminal.
condition: >
spawned_process and container
and shell_procs and proc.tty != 0
and container_entrypoint
and not user_expected_terminal_shell_in_container_conditions
output: >
A shell was spawned in a container with an attached terminal (user=%user.name user_loginuid=%user.loginuid %container.info
shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline pid=%proc.pid terminal=%proc.tty container_id=%container.id image=%container.image.repository)
priority: NOTICE
tags: [container, shell, mitre_execution, T1059]
上記のFalcoのコミュニティルールは、異なるユースケースを含んでいます。proc.nameは単なるshではなく、shell_procに含まれる長いリストです。その結果、false/positive が少なくなり、攻撃者がルールを迂回する可能性を減らすことができるでしょう。ルールが一般的すぎると、予想される動作をキャプチャーしてしまう可能性があります。
ChatGPTに質問をする場合、正確なルールを生成するためには、より正確である必要があります。例えば、私たちはChatGPTに、1日のうち特定の時間帯にLinuxワークステーション上で不審なログイン活動を検出するFalcoのルールを作成するよう依頼してみました。
今回も、ルールの見た目は気に入っています。
FalcoはLinuxシステムコールを処理するように設計されているので、ワークステーションのOSタイプに明示的に言及する必要はありません。しかし、ChatGPT は、私たちが特にこれを要求したので、Linux ワークステーション上のアクティビティのためにルールがトリガーされることをうまく言及しました。コード・スニペットをコピーして以下に貼り付けますので、さらに詳しく分析することができます。
- rule: Detect suspicious login activity during off-hours
desc: Detects login sessions initiated during off-hours on a Linux workstation
condition: (evt.time > "2022-12-31T02:00:00.000Z" and evt.time < "2022-12-31T07:00:00.000Z") and (evt.type=execve and evt.argc=3 and evt.argv[2]=login)
output: Suspicious login activity detected during off-hours: user=%user.name command=%proc.cmdline
priority: WARNING
Falcoのルールは、以下のシステムコールアクティビティを使用します。
使用されている特定の引数について、その意味や今後の使用方法について分からないことがあれば、質問全体を書き直すことなく、ChatGPTにその調査結果を詳しく説明してもらうことができます。
ChatGPTは言語モデルなので、単にルールを提供するだけでなく、その発見を明確にすることに長けています。ChatGPTによって提供されたこの追加のコンテキストで、我々はこのルールがどのようになったかに満足しています。
このルールにはビジネス上の必要性がないので、ChatGPTを使って実際のビジネス上の問題を解決していこうと思います。
引き続き、ChatGPTでより技術的な話をし、2つの専門分野を組み合わせることを試みました。FalcoとMITREです。
エンタープライズ環境向けのMITRE ATT&CKのフレームワークは大きいです! その結果、Linuxシステム向けのすべての戦術、テクニック、サブテクニックを広範囲にカバーすることは難しいかもしれません。
ChatGPTは、大きな値の運用データを読み解くことができるため、この広く使用されているリスクフレームワークとよりよく整合するようにFalcoのルールを構築するプロセスをスピードアップすることができます。
Falcoコミュニティのルールフィードでは、テクニックID「T1529」に沿った既存のルールは存在しませんでした。このテクニックIDでは、敵対者はワークステーションをシャットダウンまたはリブートして、ワークステーションへのアクセスを中断したり、それらのシステムの破壊を支援したりする可能性があります。システムのシャットダウンやリブートを検出するルールを要求する場合、MITRE ATT&CKフレームワークとのルールの整合性を図るために適切なタグ付けも要求したいところです。驚いたことに、ChatGPTはそのテクニックIDに関連する誤った戦術とテクニックを回答してきたのです。
Cloud Service Dashboard というテクニックは、戦術「Discovery」と関連するテクニック ID T1538 に割り当てられています。一方、テクニック ID T1529 はシャットダウン/リブートアクティビティと関連しており、これは戦術「Impact」と一致します。
初めてChatGPTが明らかな解答ミスをしたのです。私たちがChatGPTに問いただしたところ、すぐに謝罪し、私たちが期待するFalcoのルールに近い修正した回答を提供しました。
これで、ChatGPTがFalcoの公認コントリビュータになることへの信頼が回復されました。
しかし、ChatGPTが正しいルールを返してくれるとは限らないので、ルール条件が有効かどうかも検証する必要があります。
今回も、以下のスニペットフィールドに調査結果を貼り付けて、さらに検証してみました。ChatGPTで述べたように、このルールは第2引数(evt.argv[1])にshutdownまたはrebootが含まれるexecveイベントをチェックします。これは、プロセスがシステムのシャットダウンまたは再起動を試みていることを示し、通常のシステム操作を中断させるために使用される手法であるため、MITREの戦術および手法に正しく合致しています。
- rule: Detect T1529 - System Shutdown/Reboot
desc: Detects attempts to shut down or reboot the system
condition: (evt.type=execve and (evt.argv[1] contains "shutdown" or evt.argv[1] contains "reboot"))
output: "Detected attempt to shut down or reboot the system. T1529 - System Shutdown/Reboot detected"
priority: WARNING
tags: [tactic=impact, technique=T1529, technique_id=T1529]
これまでのところ、我々は、経験豊富なFalcoのユーザーによって吟味されることなく、ChatGPTにFalcoのルールをコントリビュートすることを頼ることができないことを学びました。
とはいえ、ChatGPT は、規制の枠組みおよび/または MITRE ATT&CK のようなリスクの枠組みに対処するために使用できるルールを迅速に寄稿しています。注入されたタグは、ユーザがセキュリティ管理ツール内でこの技術の検出を分類し、追跡することを可能にします。
これまで作成したルールは、かなり単純化されたものです。ChatGPTの真の力を試すためには、マクロやリストなどの抽象化されたものを含む、より複雑なFalcoのルールを作成する手助けを求める必要があります。
私たちが最近取り組んでいた例としては、CNCFのライブストリーム用に既知の暗号化バイナリの小さなリストを作成することでした。私たちは、ChatGPTがこの要求にどのように対処するか見てみたいと思っています。
私たちはこの解答に失望しました。
構文は有効ですが、ChatGPTからのデフォルトのアプローチは、既知のバイナリのリストを作成し、参照されるマクロを介してFalcoのルールにこれをマッピングするのではなく、常にFalcoのルール内のプロセス名をリストしています。
ChatGPT に、リスト内のバイナリを具体的に参照するよう依頼してみます。
面白いことに、ChatGPTはこの命令によってさらに混乱し、Falcoのルールのシンタックスとは異なるシンタックスを追加するようになりました。
この時点で、ルールはもはや機能しなくなり、ChatGPTはFalcoプロジェクトに有効なコントリビューターとしての信用を失いつつあります。
経験豊富なFalcoユーザーとして、私はChatGPTが私の要求を誤解しており、さらなる評価が必要であることを説明しなければなりませんでした。ChatGPTはリクエストに答えられないわけではありませんが、こちらの言い回しによってはリクエストのある側面を誤解してしまうことがあります。
そのため、リクエストにはさらなる微調整が必要かもしれませんが、最終的にChatGPTはそこにたどり着いたと見ることができます。
ChatGPTは正しい形式のFalcoのルールを与えてくれたので、さらなる発展のための素晴らしい土台となりました。しかし、このルールは確かに完璧ではありません。
'xmrig'以外にもクリプトマイニングバイナリの例はたくさんあります - xmrigが最も一般的な例であることは間違いないのですが。ここで重要なのは、一般的なバイナリを網羅した最新のリストを作成することで、可能な限り多くのセキュリティ情報を提供できるようにすることです。これらのバイナリのいくつかについては、以下のFalcoブログで触れています。
がっかりしないでください。ChatGPTがFalcoのプラグインを作成する手助けができるかどうか見てみましょう。
ChatGPTが一般的なコマンドにどのように応答するかを理解することは超重要です。ChatGPTがFalcoのプラグインを作成できるかどうか尋ねたところ、「私はコードを書いたりコンパイルしたりする能力はありません。ただし、Falcoプラグインのコード作成を支援することは可能です。」とのことです。
また、ChatGPTでは対応プロトコル(gRPC)と対応言語(C++、Go、Python)について説明されているのも注目です。
その場合、Falcoプラグインの書き方を指導してもらえばよいのです。この依頼が有効であるためには、特定のサービスに対する依頼である必要があります。最近LastPassが話題になっているので、ChatGPTにLastPass Pluginの作成を依頼することにします。
驚くことに、前回紹介した適切なgRPCプロトコルでLastPassプラグインを設定するために、以下のPythonコードスニペットが提供されました。
import grpc
from falco_proto import event_pb2
from falco_proto import event_pb2_grpc
class LastPassPlugin(event_pb2_grpc.EventServiceServicer):
def HandleEvent(self, request, context):
event = request.event
if event.event_type == "executed" and event.output.find("lastpass-cli") != -1:
print("LastPass CLI was executed")
return event_pb2.HandleEventResponse()
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
event_pb2_grpc.add_EventServiceServicer_to_server(LastPassPlugin(), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
このコードは、gRPCサーバーをセットアップし、Falcoのイベントが発生するたびに呼び出されるカスタムHandleEventメソッドを実装しています。このメソッドは、イベントが「実行された」イベントであるかどうか、そして出力が文字列 "lastpass-cli" を含むかどうかをチェックします。両方の条件が満たされた場合、LastPass CLIが実行されたことを示すメッセージを表示します。
これはあくまで基本的な例であることに注意してください。ChatGPTは、これはガイダンスとして提供されたものであり、したがって、あなたはおそらくあなたの特定の要件を満たすためにコードを修正する必要があります。
Falcoプラグインの作成に関するより詳細な情報については、Falcoの公式ドキュメントおよびgRPCプロトコルのドキュメントを参照することをお勧めします。
残念ながら、できません!
ChatGPTが説明してくれたように、ルール作成を支援することは可能です。しかし、AI言語モデルとして、それはプルリクエストを作成する権限を与えられていません。そのため、ChatGPTはオープンソースプロジェクトのコントリビューターとして公式に参加することはできません。しかし、プロジェクトのコントリビューターとコミュニティメンバーは、ルールのフォーマットを検証し、誤ったルールの矛盾を特定するだけでなく、フレームワークの要件に対応するためにルールをどのようにフォーマットすべきかについての洞察を提供するためにChatGPTを活用することができます。
ChatGPT は、Falco のセキュリティルールの作成を支援する強力な言語モデルです。様々なトピックに関する膨大な知識とテキストを生成する能力により、特定の脅威を検出するルールを作成する方法について有益なガイダンスと例を提供することができます。しかし、ChatGPT は貴重なリソースとなり得ますが、セキュリティルールの作成を完全に自動化するために信頼するべきではありません。
ChatGPTが提供する情報の正確さと関連性は、学習データと知識のカットオフによって制限される可能性があり、組織の特定のセキュリティ・ニーズについて情報に基づいた判断を下すための専門知識や文脈を持っていないかもしれません。さらに、セキュリティルールの作成は継続的なプロセスであり、新たな脅威や技術の変化に対応するために常に監視、チューニング、更新を行う必要があります。
そのため、本番環境にデプロイする前に、ChatGPTを利用し、セキュリティ専門家に相談して、ルールを検証・改良することも選択肢の一つです。
オープンソースコミュニティにコントリビュートし、セキュリティのあり方に良い影響を与えたいと考えている方は、OSS Falcoプロジェクトへの参加をご検討ください。
このプロジェクトに参加することで、経験豊富なセキュリティ専門家のチームと協力し、サイバー脅威との戦いに有意義な変化をもたらす機会を得ることができます。バグの報告やフィードバックの提供、文書やコードの作成、セキュリティコミュニティの他の人々へのプロジェクトに関する知識の普及など、様々な方法で貢献することができます。
Falcoプロジェクトは常に進化しており、皆様のコントリビューションは、プロジェクトの将来を形成し、その継続的な成功を確保するのに役立ちます。あなたが経験豊富なセキュリティ専門家であっても、この分野を始めたばかりであっても、OSS Falcoプロジェクトは、真の変化をもたらし、貴重な経験を得るためのユニークな機会を提供します。では、なぜ待つのでしょうか?今すぐ Falco コミュニティに参加し、クラウドネイティブコンピューティングの未来 を守る手助けをしてください。