本文の内容は、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のセキュリティルールやプラグインを書くことができ、コントリビューターとなれるだろうか?
Falcoの新しいパートナー候補としてのChatGPT
冗談はさておき、この記事では、組織が効果的かつ効率的なセキュリティルールを作成するためのツールとしてのChatGPTの実行可能性を探ります。Falcoのそれらの新しいルールは、彼らのコンテナやホストが潜在的な脅威から保護されていることを保証するでしょうか?ChatGPTのランタイムセキュリティとは?
まず始めに、ランタイムセキュリティとは何なのかを理解する必要があります。検索エンジンを使用するのではなく、プロセスをスピードアップするために、ChatGPTに質問することにします。 ChatGPTによると: 「ランタイムセキュリティは、ソフトウェアシステムを実行中にリアルタイムで監視・保護し、セキュリティ上の脅威を検知・防御し、被害の拡大を防ぐための緩和策を実施することである。ランタイムセキュリティの目標は、セキュリティ上の脅威や脆弱性が悪用され、被害が発生する前に特定し、対応することです。」
ChatGPTにおけるFalco?
ChatGPTでは、オープンソースプロジェクト「Falco」をわかりやすくまとめました。 Falco.orgのランディングページから情報をコピーするのではなく、ChatGPTは、Linuxカーネル内で収集したデータからセキュリティ脅威を検出する際に、FalcoがeBPFを利用して低オーバーヘッドを達成する方法として有用なコンテキストを提供しました。
ChatGPTにFalcoのルールを作ってもらう
では、言語モデルがOSS Falcoのセキュリティルールを書けるかどうか、ChatGPTに尋ねてみましょう。 以下のスクリーンショットから、ChatGPTは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のルールを作成するよう依頼してみました。

- 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: WARNINGFalcoのルールは、以下のシステムコールアクティビティを使用します。
- evt.time – これはイベントのタイムスタンプです。T02:00 (午前2時)からT07:00 (午前7時)の間です。
- evt.type – これはイベントの名前です。例えば、「open」や「read」です。この場合、execveです。execveイベントは、pathnameで参照されるプログラムを実行します。

ChatGPT、MITRE ATT&CK、および、Falco
引き続き、ChatGPTでより技術的な話をし、2つの専門分野を組み合わせることを試みました。FalcoとMITREです。 エンタープライズ環境向けのMITRE ATT&CKのフレームワークは大きいです! その結果、Linuxシステム向けのすべての戦術、テクニック、サブテクニックを広範囲にカバーすることは難しいかもしれません。 ChatGPTは、大きな値の運用データを読み解くことができるため、この広く使用されているリスクフレームワークとよりよく整合するようにFalcoのルールを構築するプロセスをスピードアップすることができます。 Falcoコミュニティのルールフィードでは、テクニックID「T1529」に沿った既存のルールは存在しませんでした。このテクニックIDでは、敵対者はワークステーションをシャットダウンまたはリブートして、ワークステーションへのアクセスを中断したり、それらのシステムの破壊を支援したりする可能性があります。システムのシャットダウンやリブートを検出するルールを要求する場合、MITRE ATT&CKフレームワークとのルールの整合性を図るために適切なタグ付けも要求したいところです。驚いたことに、ChatGPTはそのテクニックIDに関連する誤った戦術とテクニックを回答してきたのです。

- 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 を使用したクリプトマイニングの検出方法
これまで作成したルールは、かなり単純化されたものです。ChatGPTの真の力を試すためには、マクロやリストなどの抽象化されたものを含む、より複雑なFalcoのルールを作成する手助けを求める必要があります。 私たちが最近取り組んでいた例としては、CNCFのライブストリーム用に既知の暗号化バイナリの小さなリストを作成することでした。私たちは、ChatGPTがこの要求にどのように対処するか見てみたいと思っています。


ChatGPTはFalcoのプラグインを作成できますか?
がっかりしないでください。ChatGPTがFalcoのプラグインを作成する手助けができるかどうか見てみましょう。 ChatGPTが一般的なコマンドにどのように応答するかを理解することは超重要です。ChatGPTがFalcoのプラグインを作成できるかどうか尋ねたところ、「私はコードを書いたりコンパイルしたりする能力はありません。ただし、Falcoプラグインのコード作成を支援することは可能です。」とのことです。

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はFalcoプロジェクトにコントリビュートできますか?
残念ながら、できません! ChatGPTが説明してくれたように、ルール作成を支援することは可能です。しかし、AI言語モデルとして、それはプルリクエストを作成する権限を与えられていません。そのため、ChatGPTはオープンソースプロジェクトのコントリビューターとして公式に参加することはできません。しかし、プロジェクトのコントリビューターとコミュニティメンバーは、ルールのフォーマットを検証し、誤ったルールの矛盾を特定するだけでなく、フレームワークの要件に対応するためにルールをどのようにフォーマットすべきかについての洞察を提供するためにChatGPTを活用することができます。