本文の内容は、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を利用して低オーバーヘッドを達成する方法として有用なコンテキストを提供しました。 この時点で、私たちは、ランタイムセキュリティとは何か、そして、異常なランタイムセキュリティ問題を検 出するために Falco がどのように使用できるかを理解しました。さて、オープンソースのFalcoに慣れたところで、ChatGPTに有用な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: 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に関連する誤った戦術とテクニックを回答してきたのです。 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 を使用したクリプトマイニングの検出方法
これまで作成したルールは、かなり単純化されたものです。ChatGPTの真の力を試すためには、マクロやリストなどの抽象化されたものを含む、より複雑なFalcoのルールを作成する手助けを求める必要があります。 私たちが最近取り組んでいた例としては、CNCFのライブストリーム用に既知の暗号化バイナリの小さなリストを作成することでした。私たちは、ChatGPTがこの要求にどのように対処するか見てみたいと思っています。 私たちはこの解答に失望しました。 構文は有効ですが、ChatGPTからのデフォルトのアプローチは、既知のバイナリのリストを作成し、参照されるマクロを介してFalcoのルールにこれをマッピングするのではなく、常にFalcoのルール内のプロセス名をリストしています。 ChatGPT に、リスト内のバイナリを具体的に参照するよう依頼してみます。 面白いことに、ChatGPTはこの命令によってさらに混乱し、Falcoのルールのシンタックスとは異なるシンタックスを追加するようになりました。 この時点で、ルールはもはや機能しなくなり、ChatGPTはFalcoプロジェクトに有効なコントリビューターとしての信用を失いつつあります。 経験豊富なFalcoユーザーとして、私はChatGPTが私の要求を誤解しており、さらなる評価が必要であることを説明しなければなりませんでした。ChatGPTはリクエストに答えられないわけではありませんが、こちらの言い回しによってはリクエストのある側面を誤解してしまうことがあります。 そのため、リクエストにはさらなる微調整が必要かもしれませんが、最終的にChatGPTはそこにたどり着いたと見ることができます。 ChatGPTは正しい形式のFalcoのルールを与えてくれたので、さらなる発展のための素晴らしい土台となりました。しかし、このルールは確かに完璧ではありません。 ‘xmrig‘以外にもクリプトマイニングバイナリの例はたくさんあります – xmrigが最も一般的な例であることは間違いないのですが。ここで重要なのは、一般的なバイナリを網羅した最新のリストを作成することで、可能な限り多くのセキュリティ情報を提供できるようにすることです。これらのバイナリのいくつかについては、以下のFalcoブログで触れています。ChatGPTは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プロトコルのドキュメントを参照することをお勧めします。