IMDS パケットアナライザーをバックグラウンド実行する

AWS,EC2

概要

  • インスタンスメタデータは、実行中のインスタンスを設定または管理するために使用するインスタンスに関するデータです。IMDS (インスタンスメタデータサービスバージョン)には、IMDSv1 (リクエスト/レスポンスメソッド)、IMDSv2 (セッション志向メソッド) の2種類があります。SSRF(Server Side Request Forgery)の脆弱性脆弱性への攻撃に対応するため、EC2 のIMDSv2 設定はデフォルトが Optional → Required に変わりました。[AWS News Blog]
  • IMDSv2 へ移行するために、いくつかの方法やツールが用意されています。今回は、IMDS パケットアナライザを説明します。その他、IMDSv2 へ移行するための全体的な情報は、以下のドキュメントを参照ください。

 

IMDS パケットアナライザーの対応OS

  • IMDS パケットアナライザーは、対応OS は以下となります。CentOS 7,8 やRHEL 7 は対応していません。注意ください。
    • Amazon Linux 2023
    • Amazon Linux 2
    • Amazon Linux 1, 2018.03
    • Debian 11
    • Debian 10
    • Ubuntu 20 / 22
    • RHEL 8 / 9 / Fedora
    • SLES 15
    • CentOS 9
    • Windows

IMDS パケットアナライザーのインストール手順

  • Amazon Linux 2 を例にインストール手順を記載します。詳細は、こちらを参照ください。
  • IMDSパケットアナライザーに必要なパッケージをインストールします。
    • sudo yum install bcc-tools libbpf
    • sudo yum install kernel-devel-$(uname -r)
  • Git をインストールします。
    • sudo yum install git
  • Pythonのインストール状況を確認します。
    • python3 –version
  • IMDSパケットアナライザーのコードをダウンロードします。
    • git clone https://github.com/aws/aws-imds-packet-analyzer.git

IMDS パケットアナライザーの実行

  • 下記のコマンドでIMDS パケットアナライザーを実行します。
    • python3 aws-imds-packet-analyzer/src/imds_snoop.py
  • コマンドの標準出力を確認します。
    • IMDSv2 を使用した通信の場合は[INFO]と表示され、IMDSv1 を使用した通信の場合は[WARNING]と表示されます。
  • 実行結果に応じて、OSのパッケージや各種Agent、AWS CLI をIMDSv2 サポートバージョンにアップデートします。
[ec2-user@niikawa-test-linux ~]$ sudo python3 aws-imds-packet-analyzer/src/imds_snoop.py
Logging to /var/log/imds/imds-trace.log
cannot attach kprobe, probe entry may not exist
cannot attach kprobe, probe entry may not exist
Starting ImdsPacketAnalyzer...
Output format: Info Level:[INFO/ERROR...] IMDS version:[IMDSV1/2?] (pid:[pid]:[process name]:argv:[argv]) -> repeats 3 times for parent process
[WARNING] IMDSv1(!) (pid:32696:curl argv:curl -s -f http://169.254.169.254/latest/meta-data/network/interfaces/macs/0a:26:a8:1f:41:69/local-ipv4s) called by -> (pid:32695:dhclient-script argv:/bin/bash /usr/sbin/dhclient-script) -> (pid:32693:dhclient-script argv:/bin/bash /usr/sbin/dhclient-script) -> (pid:32692:dhclient-script argv:/bin/bash /usr/sbin/dhclient-script) Req details: GET /latest/meta-data/network/interfaces/macs/0a:26:a8:1f:41:69/local-ipv4s HTTP/1.1, Host: 169.254.169.254, User-Agent: curl/8.3.0, Accept: */*, Possibly lost 1 samples

 

IMDS パケットアナライザーのバックグラウンド実行

  • 下記のコマンドでIMDS パケットアナライザーバックグラウンドで実行します。
■起動方法
[ec2-user@niikawa-test-linux ~]$ sudo python3 aws-imds-packet-analyzer/src/imds_snoop.py &>>/tmp/aws-imds-packet-analyzer_results.txt &
[1] 15766
[ec2-user@niikawa-test-linux ~]$ jobs
[1]+  Running                 sudo python3 aws-imds-packet-analyzer/src/imds_snoop.py &>>/tmp/aws-imds-packet-analyzer_results.txt &

■停止方法
[ec2-user@niikawa-test-linux ~]$ fg %1
sudo python3 aws-imds-packet-analyzer/src/imds_snoop.py &>>/tmp/aws-imds-packet-analyzer_results.txt
^C

■停止方法 (pkill)
[ec2-user@niikawa-test-linux ~]$ ps -ef | grep python3
[ec2-user@niikawa-test-linux ~]$ pkill python3
[ec2-user@niikawa-test-linux ~]$ ps -ef | grep python3

 

関連資料