Share
Embed
Transcript
48 slides
-
本日のスケジュール • 10分 会場説明/イベント説明 • 20分 ツールのインストール • 30分 binwalk
ファームウェアの展開 • 30分 firmwalker 機微な情報の探索 • 30分 firmadyne ファームウェアのエミュレート • 30分 自習 • 30分 成果報告・まとめ -
IoTのセキュリティ • IoT、組込み機器 – 通信モジュール – サーバ機能 – クライアント機能 –
ファームウェア – 基板、デバッグポート – 初期設定値 • サーバ – Webアプリ – 既知の脆弱性スキャン • アプリ – PCソフト – モバイルアプリ • システム全体 – 独自プロトコル – サービス仕様 -
なぜファームウェア解析?(by ChatGPT) • セキュリティ上のリスク: – IoTデバイスのファームウェアが解析されると、攻撃者がシステムにアクセスして、機密情報や個人情報を盗むことができます。 • 機能上のリスク: – ファームウェアの解析により、製品の機能やパフォーマンスが悪化する可能性があります。このような問題は、製品の品質を低
下させ、消費者からの不満や苦情を引き起こすことがあります。 • 法的リスク: – IoTデバイスのファームウェアが解析された場合、知的財産権侵害や競合他社の知識の不正取得など、法的問題が発生する可能 性があります。 • ブランドイメージ上のリスク: – ファームウェアの解析によって、IoTデバイスの脆弱性が明らかになり、消費者からの信頼を失う可能性があります。これによ り、企業のブランドイメージに悪影響が出ることがあります。 • コスト上のリスク: – ファームウェアの解析によって、セキュリティの強化や製品の改良に必要なコストが増加することがあります。また、IoTデバ イスを更新するために、消費者に費用がかかることがあるため、市場シェアを失う可能性があります。 -
なぜファームウェア解析?(補足) • ファームウェアは誰でも手に入る(実機不要) • ファームウェアは全機器共通 • ファームウェアはある種の設計図 • 今回のハンズオンの目的 –
ファームウェアが解析されることによるリスクを体感 – セキュアな製品開発にむけた気付きを得る -
OWASPのファームウェア解析プロジェクト FSTM • OWASP Firmware Security Testing Methodology – https://github.com/scriptingxss/owasp-fstm
– https://coky-t.gitbook.io/owasp-fstm-ja/ -
Linux terminalの基本操作 • 入力補完 Tab → • コピー&ペースト Ctrl+Shift+C Ctrl+Shift+V
• 処理の停止 Ctrl+C • ファイル一覧の表示 ls ls -la • ディレクトリの表示 pwd • ディレクトリの移動 cd ./ディレクトリ cd ../ • ファイルの削除 rm ファイル rm -r ディレクトリ • ファイルの出力 cat ファイル • 文字列の検索 grep -inr キーワード ディレクトリ grep -n5 キーワード ファイル -
今回使うツール • stage3:ファームウェアの解析 – binwalk:バイナリ展開ツール – sasquatch:ファイルシステムの展開補助プラグイン – openssl:ファームウェアの暗号化 •
stage5: ファイルシステムコンテンツの解析 – firmwalker:コンテンツ探索ツール • stage6:ファームウェアのエミュレート – firmadyne :エミュレータ – firmware-analysis-toolkit(fat):エミュレータの自動化ツール – nmap,sslscan :ポートスキャンツール https://github.com/ReFirmLabs/binwalk/ https://github.com/devttys0/sasquatch/ https://github.com/craigz28/firmwalker/ https://github.com/firmadyne/firmadyne/ https://github.com/attify/firmware-analysis-toolkit/ -
今回使うファームウェア • FSTMや各種プロジェクトで例示されたファームウェアを利用 – stage3: Damn Vulnerable Router Firmware (DVRF)
v0.3 • Linksys E1550にインストール可能な学習用ファームウェア – stage5: xxx社製 xxx • firmwalker用 sampleファームウェア(展開済み) – stage6: Netgear社製 WNAP320 v2.0.3 • firmadyne用sampleファームウェア • 自習課題 – 企業のサポートサイトから任意のファームウェアをダウンロード -
今回のファイル&ディレクトリ構成 /home/kali /tmp ・・・ mkdir tmp でフォルダ作成、ツール置き場 /sasquatch /firmware-analysis-toolkit /firmadyne
/firmwalker /Downloads ・・・ sampleファームウェア格納用(3種類以上) /stage3 /firmware.bin /_firmware.bin.extracted /stage5 /stage6 -
インストール手順・概要 • binwalkを削除(バグ) • sasquatchのインストール • firmware-analysis-toolkit(fat)のインストール – binwalkの再インストール •
firmadyneのインストール • firmwalkerのインストール -
インストール手順 1/5 # binwalkの削除 binwalk -h # binwalkのhelpが出力されることを確認 sudo apt
update sudo apt remove binwalk # Do you want to continue? [Y/n] y binwalk -h # binwalkのhelpが出力さないことを確認 # ツール用のフォルダ作成 cd mkdir tmp -
インストール手順 2/5 # sasquatchのインストール(パッチ適用) cd cd tmp git clone https://github.com/devttys0/sasquatch
cd sasquatch wget https://github.com/devttys0/sasquatch/pull/51.patch && patch -p1 <51.patch ls sudo ./build.sh # continue? [Y/n] y 参考:Binwalkエラー時のsasquatchのパッチ適用について https://github.com/ReFirmLabs/binwalk/issues/618 -
インストール手順 3/5 # fatのインストール cd cd tmp git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit ls sudo ./setup.sh # 数分かかります→ binwalk自動DL cd binwalk ls sudo python3 setup.py install # binwalkが再インストールされる sudo ./deps.sh # Continue [y/N]? y binwalk -h # binwalkのhelpが出力 -
インストール手順 4/5 # firmadyneのインストール cd cd tmp sudo apt-get install
busybox-static fakeroot git dmsetup kpartx netcat- openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util- linux vlan git clone --recursive https://github.com/firmadyne/firmadyne.git cd ./firmadyne ./download.sh # ビルド済みバイナリの追加DL -
インストール手順 5/5 # firmwalkerのダウンロード cd cd tmp # git clone
https://github.com/craigz28/firmwalker git clone https://github.com/scriptingxss/firmwalker #fork版 -
ファームウェアのダウンロード 1/3 # stage3用のファームウェア(DVRF_v03.bin)のダウンロード # ブラウザからDL https://github.com/praetorian-inc/DVRF/blob/master/Firmware/DVRF_v03.bin cd cd Downloads
ls mkdir stage3 mv DVRF_v03.bin stage3 # 混同しないように別フォルダに移動 -
ファームウェアのダウンロード 2/3 # stage5用のファームウェア(squashfs-root.zip)のダウンロード # ブラウザからsquashfs-root.zipをDL https://1drv.ms/f/s!AucQMYXJNefdvGZyeYt16H72VCLv cd cd Downloads
ls mkdir stage5 mv squashfs-root.zip stage5 # 混同しないように別フォルダに移動 cd stage5 unzip squashfs-root.zip # zipを展開しておく ls -
ファームウェアのダウンロード 3/3 # stage6用のファームウェアのダウンロード cd cd Downloads wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202 .0.3.zip
ls mkdir stage6 mv WNAP320¥ Firmware¥ Version¥ 2.0.3.zip stage6 # 別フォルダに cd stage6 unzip WNAP320¥ Firmware¥ Version¥ 2.0.3.zip # zipを展開しておく→ WNAP320_V2.0.3_firmware.tar -
binwalkの前に cd cd Downloads/stage3 file “bin” strings “bin” strings -n10
“bin” strings “bin” | grep key hexdump -C -n 512 “bin” > hexdump.out hexdump -C “bin” | head -n 20 hexdump -C “bin” | tail -n 20 hexdump -vC “bin” | tail -n 20 “bin”:DVRF_v03.bin 展開する前のファームウェア -
演習課題② 暗号化とエントロピー • 暗号化したファームウェアのエントロピー確認 – 出力結果に違いは? cd cd Downloads/stage3 binwalk
-E DVRF_v03.bin openssl enc -aes-256-cbc -e -in DVRF_v03.bin -out enc.bin binwalk -Me enc.bin binwalk -E enc.bin -
firmwalkerの実行 2/3 • Error: Please run "shodan init <api key>"
before using this command -
firmwalkerの実行 3/3 (shodan連携機能のオフ) cd cd tmp/firmwalker cat firmwalker.sh | grep
-n5 shodan #shodanのifループを無視 sed s/shodan/Xshodan/ firmwalker.sh > firmwalker_1.sh # 別名保存 cat firmwalker_1.sh | grep -n5 shodan ls -la chmod 700 firmwalker_1.sh # 実行権限 ls -la ./firmwalker_1.sh /home/kali/Downloads/stage5/squashfs-root cat firmwalker.txt # 結果出力 -
演習課題③ 可読な情報の探索 • firmwalkerは何を検出している? – どのファイルにどんなリスク? • 機微な情報を探してみる – 検出されたファイルを探して読む
– このファームウェアは何の製品? – 会社名、機種名 – 認証情報など・・・ -
firmadyneの設定 cd cd tmp/firmadyne ls vim firmadyne.config #!/bin/sh # uncomment
and specliify full path ・・・ FIRMWARE_DIR=/home/kali/tmp/firmadyne i [Esc] :wq -
エミュレート成功 • fatの処理終了後、ポートスキャンを実施 • ブラウザでアクセス – http://192.168.0.100 – https://192.168.0.100 nmap
–p 1-500 192.168.0.100 sslscan 192.168.0.100 -
演習課題⑥ • これまでの演習内容の深堀り – binwalkの結果をじっくり味わう – エミュレートしたファームウェアで遊んでみる • 他のファームにチャレンジ –
検索 [社名 サポート ファームウェア] – 検索 [製品名 サポート ファームウェア] など – binwalkできないファームウェアであれば、それはなぜか?