🚀 ニフティ’s Notion

🛡️ 【セキュリティ2024 #7】セキュリティ演習

演習準備

IAMロールを作成する

演習で使う、IAMReadOnlyAccessを付与するIAMロールを作成します。

検索からIAMのダッシュボードに入り、左側の「ロール」を選択し、「ロールを作成」をクリックします。

image block

「AWSのサービス」から「EC2」を選び、次へ進みます。

image block

「IAMReadOnlyAccess」を検索し、チェックを入れて次に進みます。

image block

ロール名を emtg-security-scixxxxx (例)にして、他は変更せずに次へ進みます。

image block

以上でIAMロールが作成できました。

EC2を立ててSSHする

EC2のダッシュボードに入り、東京リージョンであることを確認して、「インスタンスを起動」をクリックします。

image block

名前 emtg-security-scixxxxx
Amazon マシンイメージ (AMI) Amazon Linux 2 AMI(HVM) Kernel 5.10, SSD Volume Type 無料利用枠の対象
インスタンスタイプ t2.micro
キーペア emtg-security
image block

ネットワーク設定で「編集」をクリックして以下の通りにしてください。

※ネットワーク的に隔離されているVPCで試しましょう。ここでは、他にリソースの無いVPC emtg-security-vpc を用います。

VPC emtg-security-vpc
サブネット emtg-security-subnet-public1-ap-northeast-1a
パブリック IP の自動割り当て 有効化
ファイアウォール (セキュリティグループ) セキュリティグループを作成
セキュリティグループ名 emtg-security-scixxxxx
インバウンドセキュリティグループのルール 後述
image block

ここまで入力したら、その状態で左下の「CloudShell」をクリックしてください。

しばらくするとシェルが立ち上がるので、 curl http://checkip.amazonaws.com/  と入力し、出てきたipアドレスをセキュリティグループのルールに追加します。(画像を参考に変更してください)

タイプ カスタムTCP
ポート範囲 12322
ソースタイプ カスタム
ソース [調べたIPアドレス] /32
説明 cloudshell
image block

「高度な詳細」を選択し、一番下の「ユーザーデータ  - オプション」に以下を入力します。

#!/bin/bash
echo "Port 12322" >> /etc/ssh/sshd_config
systemctl restart sshd
image block

今までの設定が合っているかもう一度確認し、右にあるオレンジの「インスタンスを起動」をクリックします。

すぐに成功するはずです。真ん中の「インスタンスに接続」をクリックします。

image block

別のタブに飛びますが、CloudShellも同時に見えるはずです。(なければ左下から出してください)

Cloud shellの「アクション」から「ファイルのアップロード」をクリックし、以下のpemファイルをアップロードして下さい。

image block

アップロード成功後、シェルで chmod 400 emtg-security.pem  を叩いてください。

その後、画面に表示されているコマンド例をコピーして、 後ろに -p 12322 をつけて 実行します。

image block

繋がらない場合は少し待ったり、一旦Ctrl-Cで抜けてもう一度叩きなおしたりしてください。

fingerprintについてきかれたらyesを叩いてください。

これで、今作ったEC2にSSHできます。

パッケージのアップデート(脆弱性対策)

コマンドで以下を実行してください。

sudo yum update -y

実行後の画面を運営に見せてください。

演習:IAMロールの付け外しをしてみる

まずは権限が無い状態でIAMロールの一覧を取得するコマンドを叩いてみましょう。

aws iam list-roles

恐らく、aws configureコマンドを使って資格情報を設定せよというエラーがでます。

これは、使っているEC2にiamの参照権限がないためです。

※実際に書いてある通りにaws configureコマンドで資格情報を設定することも可能ですが、資格情報がサーバ内に残ることなります。

次に、準備で作成したIAMロールをEC2インスタンスに付与します。

検索からEC2ダッシュボードに入り、東京リージョンであることを確認して、「インスタンス(実行中)」にはいります

自分のインスタンスのインスタンスIDをクリックしてください。

セキュリティタブの「IAMロール」を見て、現状IAMロールが何も設定されていないことを確認してください。

image block

上の「アクション」「セキュリティ」「IAMロールを変更」をクリックします。

image block

自分が作ったIAMロール emtg-security-scixxxxx を選択し、「IAMロールの更新」をクリックします。

image block

これでEC2にIAMロールを設定できました。

もう一度IAMロールの一覧を取得するコマンドを叩いてみましょう。

aws iam list-roles

たくさん出てくると思います。grepで絞り込んで、今回作ったものを探してみてください。

また、 aws iam list-users とするとIAMユーザの一覧を見る事もできます。
※他にも見る事ができるので、コマンドオプションを調べて他にもやってみて良いです。

終わったら、上の手順でiamロールを外してください。

※運営は全EC2にiamロールが付与されていないことを確認する。

演習:ポート全開放してみる

アクセスログを見る

まずは通常設定でのアクセスログを見てみます。

ifconfigコマンドで、ネットワークインターフェースが eth0 であることを確認します。

何も変えてなければ、似たような表示になるはずです。

[ec2-user@ip-172-31-8-213 ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.8.213  netmask 255.255.240.0  broadcast 172.31.15.255
        inet6 fe80::82b:c3ff:fe78:a289  prefixlen 64  scopeid 0x20<link>
        ether 0a:2b:c3:78:a2:89  txqueuelen 1000  (Ethernet)
        RX packets 81511  bytes 118544792 (113.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10952  bytes 664563 (648.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 48  bytes 3888 (3.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 48  bytes 3888 (3.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

以下のコマンドを叩いてください。(sshで使っている12322ポート以外のパケットを見る)

sudo tcpdump -i eth0 -n not port 12322

しばらく眺めてください。NTPやARPのパケットが流れているのがわかります。

通常設定でどのようなパケットが飛んでいるのかを覚えておいてください。

ポート全開放する

赤丸の場所をクリックして、作成したインスタンスの設定画面に移動します。

image block

「セキュリティ」タブのセキュリティグループから、作成したセキュリティグループの設定画面に移動します。

image block

「インバウンドのルールを編集」をクリックします。

image block

この状態で、cloudshellでサーバ操作ができる事を確認してください。

image block

⚠️
インバウンドルール(ファイアウォール)を全開放します
指示をするまでは実行しないでください
・実行前に、EC2削除手順を理解しておいてください。
・通常は(特にサービス環境では)絶対にやってはいけません。
・解放中は目を離さず、用事が済んだらすぐにEC2を削除してください。

「ルールを追加」を押し、「すべてのトラフィック」「Anywhere-IPv4」を選択します。

image block

シェルで sudo tcpdump -i eth0 -n not port 12322 を叩いて、準備ができたら「ルールを保存」をクリックします。

観察をする前に、「インバウンドのルールを編集」をクリックして再度ルールの設定画面に行き、削除ボタンを押して、「ルールを保存」を押すだけでポートが閉じられるようにしてください。

その状態で、シェルに流れてくるパケットの一覧をしばらく眺めてみてください。

気が済むまで眺めたら、「ルールを保存」を押して、ポートを閉じてください。

お片付け(なるべく早く)

上部検索窓からEC2と検索し、EC2のダッシュボードに入り、「インスタンス(実行中)」を選択します。

自分のインスタンスを選択し、「インスタンスの状態」→「インスタンスの終了」を選択します。

※運営は全EC2が削除されたことを確認する

残りのリソースは運営で削除します。分かる人は自分で削除して構いません。

  • セキュリティグループ
  • IAMロール