SlideShare a Scribd company logo
1 of 39
Download to read offline
はじめて解析したマルウェア
はMIPSアーキテクチャ
Igeta
入社をきっかけにIT系の道に.
B4~M2の間で, 人工骨材料と細胞について研究する毎日を過ごす.
社会人3年目
略歴
入社後には,某プロキシ製品を担当.
仕事を通じてL3~L7の辺りを勉強.
突然セキュリティに興味を持ち始める.
基礎が全くない人間なので, 低いレベルから始めてみることに.
←大体30cm四方
←かわいい!
略歴
・自分の書いたプログラムを逆アセンブル
・Linuxカーネルルートキットのソースコードを読む
今回初めて本物のマルウェア解析に挑戦!
基礎が全くない人間なので, 低いレベルから始めてみようと
略歴
現在, 産業システム向けセキュリティをやってます.
(工場, 発電所, ビル etc.)
略歴
ぜひ情報交換させてください!
私の組んだ産業システム機器⇒
IoTマルウェア.
ウクライナで停電を発生させたサイバー攻撃に
使用されたBlackEnergyと一部重なる特徴を持つ.
Modbus(制御プロトコル)を盗聴するPluginを持つ.
VPNFilter
このマルウェアを解析することに決定!
まずはPluginから始めてみよう.
https://blog.talosintelligence.com/2018/05/VPNFilter.html
VPNFilter
・Modbus-Sniffing Plugin
・Tor Plugin
TALOS ブログより
この2つのPluginのハッシュ値がブログに.
VPNFilter
なにやら見慣れぬ文字列.
Virus Totalでハッシュ値を検索してみた.
https://blog.talosintelligence.com/2018/05/VPNFilter.html
VPNFilter
MIPSってなに….
https://ja.wikipedia.org/wiki/MIPS%E3%82%A2%E3%83%BC%E3%82%AD%E3%8
3%86%E3%82%AF%E3%83%81%E3%83%A3
MIPS
ミップス・コンピュータシステムズが開発した
RISCマイクロプロセッサの命令セット・アーキテクチャ
x86, x64, ARMの様に,
MIPSというアーキテクチャがあるということらしい.
ルーターにはMIPSを採用しているものも
多いらしい
MIPS
MIPSはバイナリが綺麗だから, アセンブリ初学者に
向いていると聞いたことがある
なるほど…
さっそく逆アセンブルしてみよう
x64
x64で関数を呼び出すとき
call 0x555555554550
このアドレスの関数を呼び出す
単純!分かりやすい!
MIPS
MIPSで関数を呼び出すとき
jalr t9
t9の中身のアドレスの関数を呼び出す
関数を呼び出すたびにt9値を計算する必要あり
x64と比較して, 非常にめんどくさい…
MIPS
MIPSで関数を呼び出すとき
jalr t9
t9の中身のアドレスの関数を呼び出す
関数を呼び出すたびにt9値を計算する必要あり
x64と比較して, 非常にめんどくさい…
MIPSはバイナリが綺麗だから, アセンブリ初学者に
向いていると聞いたことがある
radare2
Radare2: CUIベースの逆アセンブラ的なもの(OSS).
今まで複雑なバイナリを解析することがほとんど無かった
基本的にGDBだけで全て済ませていたが, 今回は諦めてradare2を使用
こんな風に見えるイメージ
参考
IDA Pro ¥20万超
radare2
赤字が計算結果. 【pc=0x40144c】関数の呼び出し先が分かった!
次の関数呼び出し部分も見てみる
radare2
赤字が計算結果. 【pc=0xffffffff】あれ?? 0xffffffff??
関数の呼び出しが何個かあると, 後ろの方の呼び出し先アドレスは
計算がエラーになる.
radare2
Radare2 ⇒ IDA Pro
課題1:Call先のアドレスを確認できない.
お金IDA Proが解決してくれました
MIPS
MIPSバイナリをデバッガで1行ずつ実行してみようと
gdb-multiarchというマルチアーキテクチャ対応デバッガを使ってみた.
上手く動かない…
自分のマシンがMIPSマシンでないといけないらしい.
QEMU
異なるアーキテクチャのプロセッサにも対応可能なエミュレータ
課題2:MIPSバイナリをデバッグできない.
⇒QEMUでMIPSマシンをエミュレーション
MIPS
x64とは異なる特殊?な動きがある.
x64 MIPS
add rax, 5
push rax
call 0x555555554560
xor rax, rax
addiu a0, 5
jalr t9
sub a1, 1
move a0, 0
MIPS
x64とは異なる特殊?な動きがある.
x64 MIPS
add rax, 5
push rax
call 0x555555554560
xor rax, rax
addiu a0, 5
jalr t9
sub a1, 1
move a0, 0
①
②
③
遅延スロットというもの
MIPS
課題3: MIPSが難しい ⇒ 自分で書いて動かしてみると捗る
QtSpim: MIPSシミュレータ インラインアセンブラ
Stripped & Statically linked
VPNFilterは,
静的リンクかつシンボルテーブルが削除されている(Stripped) ELF
関数名が分からない int main(void) {
puts(“Hello World”);
return 0;
}
例えば右の様に簡単なバイナリでも
“puts”を読んでいる事が分からない.
標準ライブラリ関数“puts”の中身を読んで
これ“puts”っぽいなと推測しなければならない.
ここが一番大変
(Winodwsバイナリの場合は関数名を表示してくれたのに…)
Stripped & Statically linked
課題4: ライブラリ関数が判別できない
Crosstool-ng: 様々なアーキテクチャ対応クロスコンパイラ(ライブラリも利用可)
bindiff(IDA Pro Plugin): バイナリの類似度から関数名を推測
結果, 膨大な数の関数の内, 正しく関数名を提示できたのは数個
マルウェア製作者と同じ環境を用意して比較できれば…
本当は良いやり方があるのかもしれませんが, 現状有効性ほぼ無し
Stripped & Statically linked
課題4: ライブラリ関数が判別できない
では, 解析を進めたか
ライブラリ関数っぽくても地道にアセンブリを読んでいくしかなかった
コツ
・システムコールから同定していく
・引数, 返り値から推測する
・クロスリファレンスを確認し, 呼び出し回数が多いとライブラリ関数っぽい
さあIDA Proでバリバリ解析進めよう
あわよくば簡単な解析結果だけでも どこかで公開しよう
https://blog.talosintelligence.com/2018/06/vpnfilter-update.html
VPNFilter
このPluginの動作フローについては,
解析結果としてTalosが既にBlogに載せてしまった.
逆に練習には良いのかもしれない.
解析を続行.
Blog記事
ここにフロー図の間違いが
あることを発見!
▼メインの機能
CmdLineで指定したIP addresが宛先
となるModbus通信を盗聴.
▼502番以外のBasicAuthに着目
502番以外のTCP通信の場合には
BasicAuthの認証情報を盗むらしい
if (DstPort != 502) {
sniffing BasicAuth credential
}
DstPort==502
DstPort!=502
DstIP==argv[2] DstIP!=argv[2]
If(DstIP==argv[2]) goto sniffing BasicCredential Goto recvfrom()
IDA
実際のフロー Blog記事
502番以外のTCP通信であっても,
CmdLineで指定したIP addresが宛先
となる通信の認証情報は盗まない.
▼502番以外のBasicAuthに着目
if (DstPort != 502) {
if (DstIP == argv[2])
“Sniffingしない”
else
sniffing BasicAuth credential
}
実際のフロー
502番以外のTCP通信の場合には
BasicAuthの認証情報を盗むらしい
502番以外のTCP通信であっても,
CmdLineで指定したIP addresが宛先
となる通信の認証情報は盗まない.
▼502番以外のBasicAuthに着目
if (DstPort != 502) {
if (DstIP == argv[2])
“Sniffingしない”
else
sniffing BasicAuth credential
}
実際のフロー
502番以外のTCP通信の場合には
BasicAuthの認証情報を盗むらしい
実は今回, Black Hat USA & DEF CONに参加してきました.
DEF CONで, TalosのVPNFilter解析の発表を聞いてきました!
DEF CONで, TalosのVPNFilter解析の発表を聞いてきました!
CmdLineで指定したIPアドレスの
Basic認証情報を盗まないのは
何故ですか?
私の考えではModbus以外の情報は
ノイズになるからと思います
本当は, こう言いたかったけどビビってしまいました…
Blog間違ってるよ!!
Thank you!!
まとめ
・Pluginの実装は非常にシンプル.
ほとんどのポイントがTalosのBlogに網羅済み.
・MIPSバイナリの解析にはIDA Proが必須?
⇒radare2で解析できる方法があれば, 教えて下さい!
・Modbusを盗聴するPluginの動作フローについては
Talosの表記は間違っている.
▼逆アセンブラ
IDA Pro
Plugin: BinDiff/fluorescence/mipslocalvars
Radare2
コマンド抜粋:
e asm.emu=true
aer gp=<hex> (gpの値はreadelfで確認しておく)
ar gp (aerでセットした値を確認)
aaaa
▼実行環境
Qemu
GDB
▼コンパイラ
Crosstool-ng
- mips-unknown-elf/mips-unknown-linux-uclibc
使用したツール抜粋
Plugin解析では使用しなかったが,
DecompilerのRetDecを使用すると
Switch文などの分岐の確認では便利かも.
RetDec IDA pluginを使ってみたい

More Related Content

What's hot

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
icchy
 

What's hot (20)

Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
Python 3のWebシステムでDDDに入門してみた
Python 3のWebシステムでDDDに入門してみたPython 3のWebシステムでDDDに入門してみた
Python 3のWebシステムでDDDに入門してみた
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
64ビット対応Dllインジェクション
64ビット対応Dllインジェクション64ビット対応Dllインジェクション
64ビット対応Dllインジェクション
 
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみたPython製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 

Similar to 初めて解析したマルウェアはMIPSアーキテクチャ

セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法
Riotaro OKADA
 

Similar to 初めて解析したマルウェアはMIPSアーキテクチャ (14)

02.超初心者向けセキュリティ入門(IoT)
02.超初心者向けセキュリティ入門(IoT)02.超初心者向けセキュリティ入門(IoT)
02.超初心者向けセキュリティ入門(IoT)
 
【JAWS-UGコンテナ#14】ETL処理をServerlessにしてみた件
【JAWS-UGコンテナ#14】ETL処理をServerlessにしてみた件【JAWS-UGコンテナ#14】ETL処理をServerlessにしてみた件
【JAWS-UGコンテナ#14】ETL処理をServerlessにしてみた件
 
従業員が知っておくべき新三大情報セキュリティ事故
従業員が知っておくべき新三大情報セキュリティ事故従業員が知っておくべき新三大情報セキュリティ事故
従業員が知っておくべき新三大情報セキュリティ事故
 
どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~
どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~
どこでも安全に使えるIoTを目指して ~さくらインターネットのIoTへの取り組み~
 
Deeplearningと髪型レコメンドへの応用
Deeplearningと髪型レコメンドへの応用Deeplearningと髪型レコメンドへの応用
Deeplearningと髪型レコメンドへの応用
 
How can we resolve problems.
How can we resolve problems.How can we resolve problems.
How can we resolve problems.
 
第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"
第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"
第77回MBL研究会 "多様なIoTデータストリームをクラウドレスで分散処理するミドルウェアの設計"
 
インフラ廻戦 品川事変 前夜編
インフラ廻戦 品川事変 前夜編インフラ廻戦 品川事変 前夜編
インフラ廻戦 品川事変 前夜編
 
セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法
 
IoTセキュリティ概観 (供養)
IoTセキュリティ概観 (供養)IoTセキュリティ概観 (供養)
IoTセキュリティ概観 (供養)
 
機械学習×セキュリティ
機械学習×セキュリティ機械学習×セキュリティ
機械学習×セキュリティ
 
資料
資料資料
資料
 
LLM+LangChainで特許調査・分析に取り組んでみた
LLM+LangChainで特許調査・分析に取り組んでみたLLM+LangChainで特許調査・分析に取り組んでみた
LLM+LangChainで特許調査・分析に取り組んでみた
 
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccampクラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
 

初めて解析したマルウェアはMIPSアーキテクチャ