WindowsとWSLで実現する実行バイナリファイルの品質分析と脆弱性診断

スライド概要

次のイベントの講演資料です。
https://sciencepark.connpass.com/event/246432/

profile-image

サイエンスパークの勉強会

@study-group-spc

作者について:

サイエンスパークの勉強会の資料を公開します。勉強会は2022/3現在、connpassで公開しています。 https://sciencepark.connpass.com

スライド一覧
シェア
埋め込む»CMSなどでJSが使えない場合

公開日

2022-06-17 09:28:00

各ページのテキスト

1. WDDDS2022 WindowsとWSLで実現する 実行バイナリファイルの品質分析と 脆弱性診断 SP2206-E23 2022/6/17 バグダス検証課 大橋 宣之・喜井 公一朗

2. WDDDS2022 目次. 1.はじめに 2.ソースコードから診断 3.バイナリから診断 4.運用から診断 5.最後に SP2206-E23 2

3. WDDDS2022 1.はじめに プログラム開発者が書くコードや利用するライブラリは機能優先であり、脆 弱性の問題は「まさかうちのプログラムが攻撃されるようなことは無いだろ う」という考えのもと、おざなりにされがちです。 しかしプログラムがインターネットに繋がることが当たり前になっている昨 今、作ったプログラムが踏み台にされ、PC全体の攻撃の入り口になる事例は 後を絶ちません。log4jがいい例です。 そのような攻撃の対策を、WindowsのWSLなどを用いて、開発者の負担にな らない容易さで実現できる方法をいくつか紹介していきます。 SP2206-E23 3

4. WDDDS2022 1.はじめに 使用環境は以下の通りです。 ⚫ WSL :2 ⚫ WSL内のLinux:Ubuntu 20.04 LTS ⚫ Ghidra 10.1.4 SP2206-E23 4

5. WDDDS2022 目次. 1.はじめに 2.ソースコードから診断 3.バイナリから診断 4.運用から診断 5.最後に SP2206-E23 5

6. WDDDS2022 2.ソースコードから診断 ソースコードの静的解析ですが、MicrosoftもOSSを推進してお り、 Microsoftが買収したGitHubなど特定の条件下で無償版を提供 しています。 [Microsoft] ① CodeQL - 前セミナーで解説、GitHub上で無償で実行できる ⇒おすすめ ② Microsoft Security Code Analysis - GitHub Advanced Securityへ移行 ③ lint - GitHub内で提供、Super-Linterという形で、他言語も対応してOSSとして公開されている。 https://github.com/github/super-linter ④ FxCop - VisualStudio付属の静的コード分析ツール、要コンパイル ⑤ .NET Compiler Platform(Roslynアナライザー) - VisualStudio付属の静的コード分析ツール、コ ンパイル不要 SP2206-E23 6

7. WDDDS2022 2.ソースコードから診断 [Microsoft以外] ・Polyspace - MathWorks製、有償 ・Coverity - Synopsys製、有償 ・Coverity Scan - GitHubなどに公開されているオープンソースのソフトウェアであれ ば、無償で静的コード解析を実施することができる。⇒動向に注目 ・Checkmarx - ビルド不要、バーチャルコンパイルで診断、有償 SP2206-E23 7

8. WDDDS2022 目次. 1.はじめに 2.ソースコードから診断 3.バイナリから診断 4.運用から診断 5.最後に SP2206-E23 8

9. WDDDS2022 3.バイナリから診断 3.1 binwalk 3.2 モジュール構成の解析 3.3 文字列検索 3.4 CVE検索 3.5 暗号情報の検出 SP2206-E23 9

10. WDDDS2022 3.1 binwalk free版 Linuxのほとんどのディストリビューションにて、標準で搭載されています。 対象となるモジュール内に、どのような情報が含まれているかを大まかに見 ることができます。 EXEファイルを解析 CRC32計算用のテーブルが、リトルとビッグ両方のエンディアンで存在するのがわかります。 攻撃側の立場からすれば、このようなテーブルはデータの暗号やベリファイに用いられることが 多く、その処理を特定する起点になります。 SP2206-E23 10

11. WDDDS2022 3.1 binwalk Enterprise (有償版) 2021/6/2に、Microsoftはbinwalkの開発元であるReFirm Labsを買収しました。 クラウド上で提供されており、WebにファームウェアやプログラムをD/Dすることで、 自動で診断が行われるという、価格も安く使い勝手のよいツールでした。 Microsoft Azure IoTの枠組みの中で提供される予定とのことですが、詳細がわかって いない状態です。 https://www.techrepublic.com/article/microsofts-new-security-tool-will-discover-firmware-vulnerabilities-andmore-in-pcs-and-iot-devices/ SP2206-E23 11

12. WDDDS2022 3.1 binwalk Enterprise (有償版) https://www.techrepublic.com/article/microsofts-new-security-tool-will-discover-firmware-vulnerabilities-andmore-in-pcs-and-iot-devices/ SP2206-E23 12

13. WDDDS2022 3.2 モジュール構成の解析 PE Dump Windowsモジュールの内部構造をダンプ表示します。 https://github.com/zed-0xff/pedump ここで問題が見つかることはほぼ無いですが、Windowsの障害対応でよく使 われていた「Dependency Walker」の代替として利用できます。 SP2206-E23 13

14. WDDDS2022 3.3 文字列検索 モジュール内に埋め込まれている文字列を抽出することができ ます。 ポイント: ①デバッグ用ログの文字列が、リリース用モジュールに含まれていないか - ファイルのサイズ肥大の要因 - 攻撃拠点として解析された際に、プログラムの動作を特定しやすい ②暗号鍵などの埋込 - "Private”のような文字により、秘密鍵が特定される可能性がある SP2206-E23 14

15. WDDDS2022 3.3 文字列検索 stringsコマンド -nオプション:検索する最小文字数 -wオプション: -eオプション: -e --encoding={s,S,b,l,B,L} Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit 注意点: ・SJISのような、日本固有の文字列は検索できません SP2206-E23 15

16. WDDDS2022 3.3 文字列検索 文字列と思われるものがすべて抽出されるので、予め 「private」「crc」「cert」のような検索文字を決めて、リリー ス前にチェックするパターンが良いと思います。 SP2206-E23 16

17. WDDDS2022 3.4 CVE検索 CVE (Common Vulnerabilities and Exposures)が管理している脆弱性情報デー タベースから、バイナリファイルを診断する手法が最も簡単です。 CVE データベース 診断 アプリ OpenCVEというOSSライブラリを用いることでデータベースのダウンロード ができるため、多くの無料診断アプリで使われています。 SP2206-E23 17

18. WDDDS2022 3.4 CVE検索 CVE (Common Vulnerabilities and Exposures)は、 情報セキュリティにおける 脆弱性やインシデントについて、固有の名前や番号を付与してリスト化した ものです。 ・これまでCVEができる前までは、統一されたリストが存在しませんでした。 ・そのため米国政府の支援を受けた非営利団体のMitre Corporation (マイターコーポ レーション)が、 1999年に脆弱性を一意に特定できるようCVEを提案・実装しました。 ・現在では、主要なベンダーなどから脆弱性情報が公開される際には必ずと言ってい いほど、 CVEとCVE IDが付与された上で公開されています。 SP2206-E23 18

19. WDDDS2022 3.4 CVE検索 CVEは図のようにWebから検索もできます。CVEとNISTがよく 使われます。 ※図は「Windows」で検索した結果の例 https://cve.mitre.org/ SP2206-E23 https://nvd.nist.gov/ 19

20. WDDDS2022 3.4 CVE検索 各Windowsの脆弱性に 紐付けられたCVE ID Microsoftでも 脆弱性とCVE番号 を公開しています https://msrc.microsoft.com/update-guide SP2206-E23 20

21. WDDDS2022 3.4 CVE検索 例えば、msvcr100.dllをcve.mitre.orgで検索した例です。 SP2206-E23 21

22. WDDDS2022 3.4 CVE検索 NVDでの情報です。スコアはMITREにはありません。 CVSS (Common Vulnerability Scoring System) SP2206-E23 22

23. WDDDS2022 3.4 CVE検索 ミニWDDDSで紹介したcve-bin-toolが機能的に優れていると思われます。 https://github.com/intel/cve-bin-tool ・一部のOSS系のライブラリに対して、CVEデータベースに脆弱性が登録されていな いかを検索できます。 ・しかし対象内であれば、スタティックリンクされたライブラリも検索できます。 今のところ、Windows OSの中の全てのモジュールを診断できる簡単なツールは見つけ られませんでした。自分の使用しているライブラリのCVEを検索し、脆弱性があるかを Webで検索する方法になります。 SP2206-E23 23

24. WDDDS2022 3.4 CVE検索 cve-bin-toolで診断できるモジュールの一覧 busybox dbus freeradius gnutls hunspell kexectools libjpeg_turbo libsoup lighttpd mysql ntp openswan poppler rust syslogng wpa_supplicant SP2206-E23 bzip2 dnsmasq ftp gpgme icecast libarchive liblas libsrtp logrotate nano open_vm_tools openvpn postgresql samba systemd xerces commons_compress dovecot gcc gstreamer icu libbpg libnss libssh2 lua ncurses openafs p7zip pspp sane_backends tcpdump xml2 cronie dpkg gimp gupnp irssi libdb librsvg libtiff mariadb nessus openjpeg pcsc_lite python sqlite trousers zlib cryptsetup enscript glibc haproxy jacksondatabind libebml libseccomp libvirt mdadm netpbm openldap pigz qt strongswan varnish zsh cups expat gnomeshell hdf5 kbd libgcrypt libsndfile libvncserver memcached nginx openssh png radare2 subversion webkitgtk curl ffmpeg gnupg hostapd kerberos libical libsolv libxslt mtr node openssl polarssl_fedora rsyslog sudo wireshark 24

25. WDDDS2022 3.5 暗号情報の検出(Ghidra+FindCrypt) ※WSLは使用しないツールです + ・GhidraはOSSのデコンパイラですが、デコンパイルをしなく ても調査ツールとしてだけでも非常に有用です。 ・FindCryptプラグインは、元々有償のIDA Proというデコンパイ ラ用のものを、Ghidraに移植したものです。 https://hex-rays.com/blog/findcrypt2/ ・AES/RSA/CRC32など、暗号やCRCチェックに用いられるテー ブル値を抽出できます。 SP2206-E23 25

26. WDDDS2022 3.5 暗号情報の検出(Ghidra+FindCrypt) FindCryptの実行結果 圧縮・解凍に係わるOSSのテーブルが 一致度1.000で存在しているのがわかります SP2206-E23 26

27. WDDDS2022 目次. 1.はじめに 2.ソースコードから診断 3.バイナリから診断 4.運用から診断 5.最後に SP2206-E23 27

28. WDDDS2022 4.運用から診断 以下機能を持つプログラムでは、既知の脆弱性の有無とは別に、脆弱性になり得る可 能性があります。 特に可変長のデータを扱うプログラムでは、公開されている脆弱性情報に頼らない、 念入りなチェックが必要です。 ①インターネット経由で通信する機能 ・クライアント - 偽装サーバによるクライアント改ざん・盗聴が可能か ・サーバー - 偽装クライアントによる不正リクエストの送信・盗聴が可能か ・オリジナルの通信プロトコルを使う場合、エラーチェックが完全か ⇒静的コード解析でチェック ⇒ポートスキャンなら、WSLでNmapを利用 ⇒SSL通信なら、無料の通信診断サイトを利用 https://rms.ne.jp/sslserver/basis/ssl_server_test/ 「Web診断」や「ネットワーク診断」に等しい ⇒Web上の情報は非常に多いですが、ご要望があれば 情報発信していこうと思います。 SP2206-E23 28

29. WDDDS2022 4.運用から診断 ②設定ファイルを読み込む機能 ・設定ファイルに、容易に解読できる形で暗号鍵や機密情報が平文で存在するか ⇒binwalk及び文字列検索でチェック ・不正な設定ファイルにより任意のプログラムを実行されないか ・同様に、バッファオーバーフローが発生しないか ⇒不安なら静的コード解析でチェック 運用(ブラックボックス)状態で診断は容易ではありません。 「設計時の検討」及び「静的コード解析」が有用だと考えます。 SP2206-E23 29

30. WDDDS2022 5.最後に 脆弱性診断ツールはLinuxに特化したものが多く、Windowsで実用的に使うた めには、有志の開発によるOSSだけでは不十分だと感じました。 しかしMicrosoftがGitHubを買収してから、CodeQLやGit Actionなどの強力な ツールや機能が揃いつつあります。 弊社はMicrosoftとのパスが強く、脆弱性診断の部隊ではこのアップデートを 日々追いかけています。 開発者の皆様が容易に診断できるようなツールの情報を集め、ミニWDDDS の形で数ヶ月に一度は情報発信していく予定ですのでご期待ください。 SP2206-E23 30

31. WDDDS2022 5.最後に - 宣伝 サイエンスパークは、オンライン脆 弱性診断サービスを、EdgeTech+ 2022で発表・展示します。 ①ファイルをアップロード ②セミオートで短時間で診断 ③結果がレポート形式で返る という形で、サイエンスパークな らではの知見を盛り込んだ診断を 行う、サブスクサービスの提供を 予定しています。 会場内セミナーも開催しますので、 ぜひ参加ご登録ください。 SP2206-E23 31

32. WDDDS2022 ご清聴ありがとうございました