MITRE ATT&CKの検出:Falco における特権エスカレーション

By 清水 孝郎 - MARCH 2, 2021

SHARE:

本文の内容は、2021年3月2日にStefano Chiericiが投稿したブログ(https://sysdig.com/blog/mitre-privilege-escalation-falco/)を元に日本語に翻訳・再構成した内容となっております。

MITRE ATT&CK の特権昇格カテゴリーは、敵対者がシステム内部の特権を昇格させるために使用できるかなりの数のテクニックをカバーしています。これらのテクニックを熟知しておくことで、インフラストラクチャーの安全性を確保することができます。

MITRE ATT&CK は、高度な脅威行為者が攻撃に使用する可能性のあるすべての戦術、技術、および手順 (TTP) を分析した包括的な知識ベースです。コンプライアンス基準というよりは、脅威モデルや方法論の基礎となるフレームワークです。これらの技術は、14のカテゴリにグループ化されています。

この記事では、MITREの特権エスカレーションに分類されるいくつかのテクニックを順を追って解説します。また、Falco のようなオープンソースのツールが、これらのコンテナセキュリティ攻撃の検出にどのように役立つかの例も紹介します。
商用版をお探しですか?そうであれば、イメージスキャン、コンプライアンスランタイムセキュリティ、コンテナとKubernetesのインシデント対応を提供するSysdig Secureをチェックしてみてください。ここから30日間の無料トライアルを開始しましょう 。

特権のエスカレーションが重要な理由

特権エスカレーション攻撃は、セキュリティ上の問題点を利用して、ユーザがより多くの権限を得て、システムでより高いレベルのアクセスを可能にします。

これらのタイプの欠陥は、完全なエクスプロイトチェーンに必要とされるため、攻撃者にとっては貴重なものですが、深刻度スコアが低いため、防御者や開発者が見落としてしまう可能性があります。

セキュリティ技術やメカニズムが十分に整備されていないところにセキュリティ上の欠陥が存在すると考えるのが一般的です。しかし、特権のエスカレーションに至る主なベクターの1つは、ホスト内で適用された設定ミスを経由しています。

ホストが設定されている間、または新しいソフトウェアがインストールされている間に、オペレータが権限をオープンにしたままにしておくことは非常に一般的です。そのため、インストールが完了した後に権限を戻すことを忘れてしまうことがよくあります。

もう一つの例は、インシデントが発生した時でしょう。一刻も早く事態を収束させるために、高い権限は付与されていても、インストールが完了したらリセットされないことがあります。

結論としては、セキュリティツールは異常な動作を検知することに限定すべきではないということです。それらの設定ミスをチェックすることで、そもそも攻撃を未然に防ぐことができます。例えば、Falcoのように幅広い状況を検知できる汎用性の高いセキュリティツールを使用したり、イメージスキャンのベストプラクティスに従ったりすることで、攻撃を未然に防ぐことができます。

MITREカテゴリ:特権エスカレーション

権限エスカレーションカテゴリーには、攻撃者がフルチェーン攻撃の一部として、より多くの権限を得るために使用する可能性のある12のテクニックが含まれています。

例えば、昇格制御メカニズムの悪用、ブートやログオンの自動起動、システムプロセスの作成や変更、実行フローのハイジャックなどです。

この記事では、不正昇格制御メカニズムの下で最も有名なテクニックをいくつか取り上げます。

このように攻撃者は権限をエスカレートさせて、あなたのインフラストラクチャーをさらに傷つけることになります。MITRE ATT&CK における権限のエスカレーションについて学び、Falco を使用して自分自身を守る方法を学びます。 Click to tweet

悪用される昇降制御機構

敵対者は、高度な権限を制御するメカニズムを迂回して、より高いレベルの権限を得ることができます。

このセクションでは、これらのテクニックのうち3つを見ていきます。

  • SUID と SGID
  • Sudoとsudoのキャッチ
  • World-writableなファイルのパーミッション

ほとんどの最新のシステムには、ユーザーがマシン上で実行できる特権を制限することを目的としたネイティブの昇降制御メカニズムが含まれています。しかし、ユーザの行動やシステムの構成によってシステムの状態が変化し、弱点が発生する可能性があります。ここでは、弱点がどのようにして攻撃者の利益になるかを見ていき、その検出に役立つ洞察を明らかにしていきます。

SUIDとSGID

先日、「MITRE ATT&CKを検出する:防衛回避」の記事でSUIDとGUIDについて取り上げました。

Linux では、SUID と SGID ビットが有効になっている場合、既存のバイナリーやコマンドのいくつかは、root 以外のユーザが root アクセス権限をエスカレートするために使用することができます。権限のエスカレーションを許可することができる有名な Linux/Unix の実行可能コマンドがいくつかあります: bash, cat, cp, echo, find, less, more, nano, and vim などがあります。

ファイルやディレクトリでも同様の動作をします。ファイルやディレクトリの SUID と SGID ビットを変更することで、他のユーザはファイルの所有者 (すなわち root) の同じアクセス権限を使ってそれらを実行することができ、通常のユーザはシステム管理者が所有するパスワードファイルを編集することができるようになります。

攻撃者がホストへのローカルアクセスを得ると、ほとんどの場合、ファイルの権限の誤設定をチェックして、ファイルを変更したり、権限をエスカレートさせたりすることから始めるでしょう。攻撃者に対しては、以下のコマンドを使用することで、SUIDビットが設定されているすべてのファイルとバイナリを見つけることができます。

find / -perm -u=s -type f 2>/dev/null


この場合、バイナリの /usr/bin/vim には SUID が設定されています。

vim はエディターなので、ユーザは root としてエディターを使用することができ、攻撃者がファイルを編集したり、新しいユーザ root2 を追加したりすることが可能になります。

ファイルが保存されると、攻撃者は新しいユーザーでログインし、マシンのルートアクセスを得ることができます。

Sudoとsudoキャッシング – ユーザーIDが重複したローカルユーザーの作成

Linux では、Unix システムや Linux では一般的に /etc/passwd の重複を禁止するようなことは何もしていないので、同じ userID で複数のユーザを作成することが可能です。このファイルの意図は、シンボリックユーザ名を実際のユーザ ID にマッピングし、ユーザがログインするときにどのようなシェルを取得するかを指定することです。

システム上に新しいユーザを作成する権限を持つユーザは、ルートユーザID を再利用して複製ユーザを作成する権限を持っています。このクローンユーザとしてログインすると、実質的に root として動作することになります。

このようなユーザがハッキングされた場合、攻撃者はこのルートを使ってシステム上の権限をエスカレートさせることができます。

権限のないユーザがシステムで何ができるかを評価するために、攻撃者は sudo -l で特別な権限のチェックを開始します。下の画面に示すように、このユーザーはバイナリadduserに特別な権限を持っています。

この場合、ユーザはsudoを使ってrootとしてadduserを実行し、新しいローカルユーザを追加することができます。しかし、特定のフラグを使用することで、同じルートユーザIDを持つユーザを作成し、権限をエスカレートさせることができます。

sudo adduser -u 0 -o -p $(openssl passwd -crypt password) bob


フラグ -u 0 はユーザーIDを 0 に設定します。

-o を指定すると、重複したユーザ ID を持つ新しいユーザを作成することができます。

bob ユーザに設定されたパスワードでログインすると、すぐにマシンの root 権限を取得することができます。これは whoami で確認できます。

World-writableなファイルのパーミッション

Linux では、”world-writeable “とは、誰もが書き込み可能なファイルのことです。

この設定は、システム内で変更を加える必要があるかもしれない権限のないユーザにファイルやフォルダに特別な権限を与える必要がある場合に使用されるかもしれません。

誰でも書き込み可能であることで、この権限を与えることは、特に root が所有しているファイルにとっては本当に危険かもしれません。また、書き込み可能なファイルが、rootが手動で実行したり、crontabジョブを経由して自動的に実行されたりするスクリプトである場合は、さらに危険です。

攻撃者がホストへのローカルアクセスを得れば、ファイルの権限設定の誤りをチェックして、それを利用してファイルを変更したり、権限をエスカレートさせたりすることができます。

攻撃者にとっては、システム内の書き込み可能なファイルやフォルダをすべて find で見つけることができます:

find / ! -path "/proc/*" -perm -2 -type f 2>/dev/null

結果を見ると、rootが所有するautomatedCleaner.pyファイルにローカルユーザーが書き込み可能なアクセス権を持っていることがわかります。名前から、/tmp/フォルダをクリーンに保つためのスケジュールスクリプトであることが理解できます。

ユーザーはファイルへの書き込み可能なアクセス権を持っているので、攻撃者がファイルを編集することが可能です。

このスクリプトを悪用する一つの方法は、感染したユーザを sudoers ユーザに追加して、sudo ツールを使って root としてコードを実行できるようにすることです。これは /etc/sudoers ファイルに行を追加するのと同じくらい簡単です。

#!/user/bin/env python
import os
import sys
try:
	os.system('echo "darryk ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers')
except:
	sys.exit()

crontabのスケジューラからrootでスクリプトを実行すると、sudoersファイルに改行が追加されます。

sudo -lを使うことで、このような状況が発生したときに確認することができます。ユーザーがsudoersに入ると、sudoコマンドの実行が許可され、その権限を確認することができます。

これで攻撃者は sudo su を使ってマシンの権限をエスカレートできるようになりました。

MITREの特権エスカレーションテクニックをFalcoで検出する

どのような脅威に直面しているかがわかったので、それに対する防御を開始することができます。

Falcoは、コンテナとKubernetesのランタイム脅威検出のためのCNCFオープンソースプロジェクトです。これは、コンテナ内の異常な活動を検出するように設計されたコンテナセキュリティツールです。Falcoはシステムコールを利用して、すべてのシステムアクティビティのイベントストリームを生成します。そして、Falcoのルールエンジンは、このイベントストリームに基づいてルールを作成し、異常と思われるシステムイベントをアラートすることを可能にします。Falcoのリッチな言語により、ホストレベルでルールを記述し、疑わしい活動を識別することができます。

前の例に続き、Falcoを使って防衛回避を検出する方法を見てみましょう。

SUIDとSGIDの検出

以下のFalcoルールはSUIDとGUIDビットの変更を検出します。私たちは最近、防衛回避の記事でこれを取り上げましたので、ぜひそこで詳細な説明を確認してください。

- rule: Set Setuid or Setgid bit
  desc: >
    When the setuid or setgid bits are set for an application,
    this means that the application will run with the privileges of the owning user or group respectively.
    Detect setuid or setgid bits set via chmod
  condition: >
    consider_all_chmods and chmod and (evt.arg.mode contains "S_ISUID" or evt.arg.mode contains "S_ISGID")
    and not proc.name in (user_known_chmod_applications)
    and not exe_running_docker_save
    and not user_known_set_setuid_or_setgid_bit_conditions
  output: >
    Setuid or setgid bit is set via chmod (fd=%evt.arg.fd filename=%evt.arg.filename mode=%evt.arg.mode user=%user.name user_loginuid=%user.loginuid process=%proc.name
    command=%proc.cmdline container_id=%container.id container_name=%container.name image=%container.image.repository:%container.image.tag)
  priority:
    NOTICE
  tags: [process, mitre_persistence]

sudoとsudoキャッシュの検出 – ユーザーIDが重複しているローカルユーザーの作成

この攻撃を紹介したときに、攻撃者がadduserを悪用してrootと同じuserIDの新しいユーザを作成する方法を見ました。

以下のFalcoルールは、-oや-u 0のような特定のフラグを指定してadduserやuseraddの実行を検出することができます:

- rule: Creating a root like user
  desc: using the command useradd or adduser with the flag -o -u0 it is possible to create a user with the same root userID and get user access to the machine with the new user
  condition: spawned_process and proc.exe in (useradd,adduser) and proc.args contains -o and proc.args contains -u and proc.args contains 0  
  output: "Created user with the same root userID. (user=%user.name userID=%user.uid %container.info parent=%proc.pname cmdline=%proc.cmdline)"
  priority: WARNING
  tags: [users,host]

world-writableなファイルパーミッションの検出

前に見たように、world-writableなファイルは、ホスト内部の特権をエスカレートさせるために使用することができます。

以下のFalcoルールは、特権を持つユーザが誰でも書き込み可能なアクセス権を与えるような方法でファイルやフォルダのパーミッションを変更したことを検出します:

- rule: Set world-writable Access
  desc: >
    When writable access to anyone is set for file and folder,
    This means that anyone in the system can edit those, even if owned by root. This might cause privilege escalation in case the files are run by root via crontab or manually.
    Detect writable access to anyone set via chmod
  condition: >
    consider_all_chmods and chmod and (evt.arg.mode contains "S_IWOTH")
    and not proc.name in (user_known_chmod_applications)
    and not exe_running_docker_save
  output: >
    Writable access to anyone is set via chmod (fd=%evt.arg.fd filename=%evt.arg.filename mode=%evt.arg.mode user=%user.name user_loginuid=%user.loginuid process=%proc.name
    command=%proc.cmdline container_id=%container.id container_name=%container.name image=%container.image.repository:%container.image.tag)
  priority: NOTICE
  tags: [process, host]

まとめ

この記事では、Linuxマシン内の特権をエスカレートさせる方法と、Falcoが悪意のある動作を検出する方法を紹介しました。

その他のよく知られている技術は実際に利用可能であり、将来的にはさらに多くの技術が利用できるようになるでしょう。

Falcoは強力な検出ルールを作成し、システムコールや低レベルのイベントを利用して侵入や悪意のある活動を検出することで、セキュリティチームがホストで何が起こっているのかを完全に把握できるようにします。

Falco は、ランタイムコンテナセキュリティのデファクトスタンダードとなっています。Falcoは、侵入や悪意のある活動を検出するために、syscallとK8の監査ログを利用しています。Falco のルールを MITRE ATT&CK Defense Evasion カテゴリにマッピングすることで、セキュリティチームは脅威の検出と対応のワークフローを合理化することができます。

Falco の詳細を知りたい場合は:

商用版をお探しですか?そうであれば、イメージスキャン、コンプライアンスランタイムセキュリティ、コンテナとKubernetesのインシデント対応を提供するSysdig Secureをチェックしてみてください。ここから30日間の無料トライアルを開始しましょう 。