Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

コンテナイメージのマルウェア検出とその実用性について

 コンテナイメージのマルウェア検出とその実用性について

3-shake SRE Tech Talk #5 ~ コンテナセキュリティ最前線 の資料です。
https://3-shake.connpass.com/event/277945/

Kyohei Mizumoto

April 12, 2023
Tweet

More Decks by Kyohei Mizumoto

Other Decks in Technology

Transcript

  1. whoami 株式会社スリーシェイク Sreake事業部 (SRE/)CSIRT - AWS, GCP, kubernetes 環境のセキュリティ強化 -

    SOC/CSIRT運用と改善 - 脅威情報の収集、サイバー演習 etc… その他 - 3-shake SRE Tech Talk 運営 - 「コンテナセキュリティ」書籍監訳 水元 恭平 @kyohmizu
  2. アンチウイルス(NGAV)の機能 ✅ パターンマッチング ➢ ファイルの静的な情報からマルウェアを検知 ✅ ヒューリスティック検知 ➢ ファイルの特徴的な挙動からマルウェアを検知 ✅

    AI・機械学習 ➢ マルウェアの特徴を分析し、検知の精度を高める ✅ サンドボックス ➢ 隔離された環境でマルウェアを分析
  3. アンチウイルス(NGAV)の機能 ✅ パターンマッチング ➢ ファイルの静的な情報からマルウェアを検知 ✅ ヒューリスティック検知 ➢ ファイルの特徴的な挙動からマルウェアを検知 ✅

    AI・機械学習 ➢ マルウェアの特徴を分析し、検知の精度を高める ✅ サンドボックス ➢ 隔離された環境でマルウェアを分析 コンテナイメージの マルウェアスキャン
  4. コンテナ環境を狙うマルウェア ✅ Doki ➢ Docker APIをターゲットとするバックドア型トロイの木馬 ✅ Kinsing ➢ Docker

    APIをターゲットとするクリプトマイナー ✅ Peirates ➢ Kubernetesのペネトレーションテストツール ➢ https://github.com/inguardians/peirates https://attack.mitre.org/techniques/T1610/
  5. マルウェアの侵入経路 ✅ ビルド時の侵入 ➢ 依存関係のあるファイルやライブラリにマルウェアが混入 ✅ デプロイ時の侵入 ➢ OSSやサードパーティのManifestにマルウェアが混入 ➢

    攻撃者がマルウェアを含むコンテナを意図的にデプロイ ✅ 実行時の侵入 ➢ 脆弱性の利用により、実行中のコンテナにマルウェアをダウンロード
  6. ClamAV ✅ オープンソースのアンチウイルスエンジン ✅ 複数のシグネチャに対応 ➢ CVD (ClamAV Virus Database)、YARAなど

    ✅ コンテナイメージを直接スキャンできない ➢ tar形式に保存することでスキャン可能 ➢ ただし、展開しない場合は1ファイルとしてスキャン https://github.com/Cisco-Talos/clamav
  7. サンプルイメージ $ cat Dockerfile FROM alpine RUN echo "Downloading EICAR

    file" && \ wget --no-check-certificate https://secure.eicar.org/eicar.com ENTRYPOINT ["/bin/sh", "-c", "sleep 3600"] $ docker image build -t eicar_sample . ✅ EICARテストファイルを利用 ➢ https://www.eicar.org/download-anti-malware-testfile/
  8. ClamAVによるスキャン $ docker image save eicar_sample -o image_eicar_sample.tar $ clamscan

    image_eicar_sample.tar Loading: 14s, ETA: 0s [========================>] 8.66M/8.66M sigs Compiling: 4s, ETA: 0s [========================>] 41/41 tasks /Users/kyohmizu/clamav/image_eicar_sample.tar: Win.Test.EICAR_HDB-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8659491 Engine version: 1.0.1 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 14.68 MB Data read: 7.01 MB (ratio 2.09:1) Time: 18.916 sec (0 m 18 s) Start Date: 2023:04:10 02:20:51 End Date: 2023:04:10 02:21:10
  9. YARA ✅ マルウェアの識別・分類のためのツール ✅ C言語ライクな構文でルールを記述する ✅ CLIツール、C言語のライブラリが提供されている ✅ ルールセット例 ➢

    https://github.com/JPCERTCC/jpcert-yara ➢ https://github.com/Yara-Rules/rules ➢ https://github.com/deepfence/yara-rules https://github.com/VirusTotal/yara
  10. YARAルール rule malware_Emotet { meta: description = "detect Emotet in

    memory" author = "JPCERT/CC Incident Response Group" rule_usage = "memory scan" reference = "internal research" strings: $v4a = { BB 00 C3 4C 84 } $v4b = { B8 00 C3 CC 84 } $v5a = { 6D 4E C6 41 33 D2 81 C1 39 30 00 00 } $v6a = { C7 40 20 ?? ?? ?? 00 C7 40 10 ?? ?? ?? 00 C7 40 0C 00 00 00 00 83 3C CD ?? ?? ?? ?? 00 74 0E 41 89 48 ?? 83 3C CD ?? ?? ?? ?? 00 75 F2 } $v7a = { 6A 06 33 D2 ?? F7 ?? 8B DA 43 74 } $v7b = { 83 E6 0F 8B CF 83 C6 04 50 8B D6 E8 ?? ?? ?? ?? 59 6A 2F 8D 3C 77 58 66 89 07 83 C7 02 4B 75 } condition: all of ($v4*) or $v5a or $v6a or all of ($v7*) }
  11. YaraHunter ✅ コンテナに特化したマルウェアスキャンツール ➢ 仕組みはtrivyと同じ ✅ YARAルールによるシグネチャベースのスキャンを行う ➢ https://github.com/deepfence/yara-rules ➢

    内部ではyaraのライブラリを使用している ✅ コンテナイメージ、実行中のコンテナへのスキャンが可能 ✅ docker, containerd に対応 ✅ ドキュメントが少ない... https://github.com/deepfence/YaraHunter
  12. YaraHunterによるスキャン $ docker run -it --rm --name=yara-hunter \ -v /var/run/docker.sock:/var/run/docker.sock

    \ deepfenceio/yara-hunter:latest \ --image-name eicar_sample:latest ✅ 公式イメージを利用 ➢ https://docs.deepfence.io/docs/yarahunter/using/scan/ ➢ ルールセット、スキャン対象を変更可能
  13. YaraHunterによるスキャン { "Timestamp": "2023-03-28 20:28:37.660643034 +00:00", "Image Name": "eicar_sample:latest", "Image

    ID": "172fe8dfa924ea059ab084eede871bfb9bbe31a89089b106008fcf98f08d5700", "Malware match detected are": [ { "Image Layer ID": "b1098b32d2d6b2d3787d72d11e0605a38ceb2b88f6117387eb1c91ee79b0bb92", "Matched Rule Name": "eicar", "Strings to match are": [ "X5O!P%!@(MISSING)AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" ], "Category": [], "File Name": "/tmp/Deepfence/YaRadare/df_eicarsamplelatest/ExtractedFiles/b1098b32d2d6b2d3787d72d11e0605a38ceb2b88f6117387eb1c 91ee79b0bb92/eicar.com", "description":"Rule to detect Eicar pattern ", "author":"Marc Rivero | @seifreed ", "hash1":"275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f ", "Summary": "The file has a rule match that Rule to detect Eicar pattern .The matched rule file's author is Marc Rivero | @seifreed .The matched rule file's hash1 is 275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f ." } ] }
  14. ClamAV vs YaraHunter ✅ ClamAVの方がシグネチャが豊富 ➢ CVDは日々アップデートされている ✅ YaraHunterの方がコンテナ環境への導入は容易 ➢

    CIのサンプルコードも用意されている ✅ YaraHunterではマルウェアを検知できない場合もある ➢ シグネチャが不十分 ➢ 不具合の可能性も?
  15. 参考:Kinsingマルウェアのスキャン 2/5 $ clamscan kinsing Loading: 13s, ETA: 0s [========================>]

    8.66M/8.66M sigs Compiling: 4s, ETA: 0s [========================>] 41/41 tasks /Users/kyohmizu/malware/kinsing/kinsing: Unix.Malware.Kinsing-7812065-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8659491 Engine version: 1.0.1 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 0.50 MB Data read: 15.93 MB (ratio 0.03:1) Time: 19.009 sec (0 m 19 s) Start Date: 2023:04:11 23:33:08 End Date: 2023:04:11 23:33:27 ClamAV:〇
  16. 参考:Kinsingマルウェアのスキャン 3/5 $ cat rules/kinsing.yar rule elf_kinsing_w0 { meta: description

    = "Rule to find Kinsing malware" author = "Tony Lambert, Red Canary" date = "2020-06-09" source = "https://raw.githubusercontent.com/Neo23x0/signature-base/master/yara/crime_h2miner_kinsing.yar" strings: $s1 = "-iL $INPUT --rate $RATE -p$PORT -oL $OUTPUT" $s2 = "libpcap" $s3 = "main.backconnect" $s4 = "main.masscan" $s5 = "main.checkHealth" $s6 = "main.redisBrute" $s7 = "ActiveC2CUrl" $s8 = "main.RC4" $s9 = "main.runTask" condition: (uint32(0) == 0x464C457F) and filesize > 1MB and all of them } $ yara rules/kinsing.yar kinsing elf_kinsing_w0 kinsing YARA:〇
  17. 参考:Kinsingマルウェアのスキャン 4/5 $ docker run -it --rm --name=yara-hunter \ -v

    /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/rules:/tmp/my-rules \ deepfenceio/yara-hunter:latest --image-name kinsing_sample:latest --rules-path /tmp/my-rules imageScan &{kinsing_sample:latest /tmp/Deepfence/YaRadare/df_kinsingsamplelatest { [] [] []} 0} imageName kinsing_sample:latest INFO[2023-04-11 14:46:30] trying to connect to endpoint 'unix:///var/run/docker.sock' with timeout '10s' INFO[2023-04-11 14:46:30] connected successfully using endpoint: unix:///var/run/docker.sock (中略) INFO[2023-04-11 14:46:50] container runtime detected: docker imageName kinsing_sample:latest { "Timestamp": "2023-04-11 14:46:51.258052700 +00:00", "Image Name": "kinsing_sample:latest", "Image ID": "360b23ecf303fba2520972c64149f1eed6f2be98df4665eeb0ee1f6d621a8123", "Malware match detected are": [ ] } YaraHunter:❌ ????
  18. 参考:Kinsingマルウェアのスキャン 5/5 $ docker image save kinsing_sample -o kinsing_sample.tar $

    clamscan kinsing_sample.tar Loading: 12s, ETA: 0s [========================>] 8.66M/8.66M sigs Compiling: 4s, ETA: 0s [========================>] 41/41 tasks /Users/kyohmizu/malware/kinsing/kinsing_sample.tar: Unix.Malware.Kinsing-7812065-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8659491 Engine version: 1.0.1 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 15.18 MB Data read: 22.94 MB (ratio 0.66:1) Time: 19.211 sec (0 m 19 s) Start Date: 2023:04:12 02:29:51 End Date: 2023:04:12 02:30:10 ClamAV(tar from container image):〇
  19. Do You Need To Install an Antivirus? ✅ LinuxのマルウェアはWindowsに比べると多くない ✅

    コンテナ最適化OSの環境ではマルウェアのリスクは低下する ✅ アンチウイルスは時代遅れだと考える人も多い ✅ 他のセキュリティ対策によるクラスタ保護で十分では? ➢ 監査ツールや静的解析ツール ➢ ランタイムセキュリティツール ➢ コンテナセキュリティのベストプラクティスの適用 https://thechief.io/c/editorial/kubernetes-do-you-need-to-install-an-antivirus/ https://repost.aws/questions/QU22HJZItZQRar3wcGcnDtTQ/eks-antivirus-and-best-practices
  20. Do You Need To Install an Antivirus? ✅ Linuxやコンテナ環境のマルウェアが存在しないわけではない ➢

    コンテナの普及に伴い、マルウェア作成の動機が高まる ✅ リスクは低いが0ではない ➢ ノードへのマルウェア侵入は防げても、コンテナ内はまた別の話 ✅ 効果は限定的だが、全くないわけではない ✅ アンチウイルスの保護機能を全てカバーできているのか? ➢ 全てをカバーできていなければ導入の余地はある
  21. マルウェアスキャンの効果と課題 ✅ マルウェアを特定できる ➢ 効果の大きさはシグネチャ次第 ➢ 検知だけでなく調査、分析への活用も ✅ 侵入前にマルウェアを検知可能 ✅

    実行コストが高い ➢ 全ファイルのスキャンを行うため、リソース消費が多く時間もかかる ➢ ClamAVコンテナの推奨メモリは4GiB ✅ 利用できるOSSやシグネチャが少なく、成熟していない ➢ ツールの新規開発や改修、シグネチャのアップデートが必要
  22. マルウェアスキャンの導入・運用コスト ✅ ビルド時:低 ➢ CIへの組み込みは容易 ✅ デプロイ時:高 ➢ 実行コストが高く、デプロイ時にスキャンを実行するのは現実的でない ✅

    実行時:高 ➢ 実行コストが高い(デプロイ時と同様) ➢ 専用のOSSがなく開発が必要 ➢ Enterprise製品の利用で上記コストは軽減可能
  23. Kubernetes Securityによるマルウェア対策 マルウェアス キャン 脆弱性 管理 セキュリティポリ シー イメージ署 名

    KSPM ランタイムセキュリ ティ ビルド時の侵入 ◯ ◯ デプロイ時の侵入 ◯ ◯ ◎ ◯ 実行時の侵入 ◯ ◯ ◯ ◯ 事前対策 事後対策 ✅ ビルド時の侵入対策は弱い ✅ デプロイ時の侵入はポリシーやイメージ署名が有効 ✅ クラスタの衛生管理により、実行時の侵入リスクを軽減
  24. ファストフォレンジックへの利用 ✅ 不審なコンテナが発見された場合の調査・分析 ➢ イメージ署名のないコンテナの実行を検知 ➢ コンテナ内での不審な動作を検知 ➢ 身に覚えのないコンテナが実行されていることを発見 ✅

    マルウェアが特定されれば影響範囲を推測できる ✅ コストが低く、導入が容易 ✅ スキャンを自動化することでより素早い対応に ➢ CLIツールのため組み込みやすい
  25. 余談:ツール導入の優先度について ✅ 導入効果 = 導入前後のリスクの差分 ✅ リスク = 発生可能性 ×

    影響度 ➢ 発生可能性、影響度はセキュリティ対策の状況により変動する ➢ 対策が弱い箇所の方がリスクが高くなりやすい ✅ 効果を定量化するのは難しいが、相対評価は比較的容易 ➢ そのツールを導入することで、どのようなリスクを軽減できるのか ➢ 既存のセキュリティ対策でリスクは軽減できているか ➢ 他に優先的に取り組むべき対策はないか ✅ コストを加味し費用対効果で考える