Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
DeClang 誕生!Clang ベースの
ハッキング対策コンパイラ
万萌遠
自己紹介
≫ 所属
− システム本部セキュリテイ部セキュリテイ技術グループ
≫ 経歴
− セキュリテイエンジニア5年目
− AVTOKYO、DEFCON スピーカー
≫ 業務内容
− 脆弱性診断、セキュリティレビュー、SOC、ログ管理、チ
ート...
アジェンダ
≫ 背景
≫ クライアントプロテクション技術
≫ DeClang 紹介
≫ 展望
アジェンダ
≫ 背景
≫ クライアントプロテクション技術
≫ DeClang 紹介
≫ 展望
背景:スマホゲームチートの課題
≫ チート対策を行なっているが、チートは撲滅できていない
− メモリ改ざん
− 時刻改ざん
− バイナリ改ざん
− 通信改ざん
− フッキング
* ここでいう「メモリ改ざん」はメモリ上のゲームデータの改ざんを指し...
背景:既存対策
≫ メモリ改ざん => メモリ暗号化
≫ 時刻改ざん => サーバー時間照合
≫ バイナリ改ざん => 署名改ざん検知 / ファイル改ざん検知
≫ 通信改ざん => 通信暗号化 / SSL Pinning
≫ フッキング => ...
背景:新たな課題
≫ 上級ハッカーのリバースエンジニアリングによる対策の無力化
− 今までの対策は難読化されていないので解析が容易
≫ ゲームの脆弱性診断はスケールアウトしない
− 高度な解析力と大量な時間が必要
=> クライアントプロテクショ...
背景:DeClang 誕生!
≫ 商業製品 Or 自作?
− お金がない面白いので自作しましょう!
− Unity 対応
■ 強度が強い商業製品はあるが、使い勝手が悪い(コンパ
イラ型)
■ 導入しやすい製品は強度が低いまたパフォーマンスが低
...
背景:DeClang 誕生!
≫ DeClang = DeNA + Clang
≫ Clang をベースに Pass 機能を用いて拡張
≫ いわゆるコンパイラ
なぜコンパイラ型?
アジェンダ
≫ 背景
≫ クライアントプロテクション技術
≫ DeClang 紹介
≫ 展望
クライアントプロテクション:分類
≫ 取組み方で分類
− ライブラリ型
■ リンク時に機能をリンク
− コンパイラ型
■ コンパイル時に機能を挿入
− Packer 型
■ 出来上がったバイナリに適用
暗号化された
実行データ
Unpackin...
クライアントプロテクション:比較
≫ ライブラリ型は実装済なので、コンパイラ型と Packer 型のど
れにする?
クライアントプロテクション:強度
≫ Packer 型
− 静的解析対策(難読化)
■ 全体的 Packing
− 動的解析対策
■ Root 化検知等
■ 全体改ざん検知
■ アンチデバッグ
≫ コンパイラ型
− 静的解析対策(難読化)
■ ...
クライアントプロテクション:パフォーマンス
≫ Packer 型
− アプリの起動時間に影響
■ 導入見送り事例があり
≫ コンパイラ型
− アプリの実行時効率に影響
− ただしチューニング可能
VS.
😕 😀
クライアントプロテクション:Unity 対応
≫ Packer 型
− 楽に対応できる
≫ コンパイラ型
− 頑張れば Unity 対応できるVS.
😀 😀
クライアントプロテクション:iOS 対応
≫ Packer 型
− 動的コード生成は Apple
審査ポリシーに違反する
可能性がある
≫ コンパイラ型
− 動的にコード生成しないの
で問題ない
VS.
😕 😀
クライアントプロテクション:導入ハードル
≫ Packer 型
− 開発者は何も意識しなく
て良い
≫ コンパイラ型
− 守る箇所は開発者が考える
必要がある
■ (逆に)高度なカスタマ
イズが可能
VS.
😕😀
Packer 型 コンパイラ型
導入ハードル 😀 😕
Unity対応 😀 😀
iOS対応 😕 😀
強度 😕 😀
パフォーマンス 😕 😀
クライアントプロテクション:まとめ
というわけで 4:2 でコンパイラ型の勝ち
アジェンダ
≫ 背景
≫ クライアントプロテクション技術
≫ DeClang 紹介
≫ 展望
DeClang 紹介:構成
Clang
LLVM Optimizer
(Frontend Pass)
llvm-gcc
swiftc
C / C++ / ObjC
Fotran
Swift
LLVM
X86 Backend
LLVM
ARM B...
DeClang 紹介:構成
Clang
LLVM Optimizer
(Frontend Pass)
llvm-gcc
swiftc
C / C++ / ObjC
Fotran
Swift
LLVM
X86 Backend
LLVM
ARM B...
DeClang 紹介:機能
≫ Control Flow Flattening
≫ 関数粒度の改ざん検知
≫ Unity Metadata 暗号化
≫ 全体的改ざん検知
≫ アンチデバッグ
≫ Root 化 / 脱獄 / エミュレータ検知
DeClang 紹介:機能
≫ Control Flow Flattening
≫ 関数粒度の改ざん検知
≫ Unity Metadata 暗号化
≫ 全体的改ざん検知
≫ アンチデバッグ
≫ Root 化 / 脱獄 / エミュレータ検知
De...
DeClang 紹介:Control Flow Flattening
Control Flow Flattening
DeClang 紹介:Control Flow Flattening
Control Flow Flattening
DeClang 紹介:関数粒度の改ざん検知
関数A 関数B
≫ 関数の prologue に改ざんチェックロジックをインジェクト
DeClang 紹介:関数粒度の改ざん検知
関数A 関数B
改ざん検知チェックコード
≫ 関数の prologue に改ざんチェックロジックをインジェクト
DeClang 紹介:関数粒度の改ざん検知
改ざん検知
改ざん検知
チェックコード
チェックコード
関数A 関数B
≫ 関数の prologue に改ざんチェックロジックをインジェクト
DeClang 紹介:関数粒度の改ざん検知
関数C
改ざん検知
改ざん検知
チェックコード
チェックコード
関数A
チェックコード
関数B
チェックコード
≫ 関数の prologue に改ざんチェックロジックをインジェクト
DeClang 紹介:関数粒度の改ざん検知
改ざん検知
改ざん検知
3関数4箇所を外さないといけない
チェックコード
チェックコード
関数A
チェックコード
関数B
チェック...
DeClang 紹介:Metadata 暗号化
≫ global-metadata.dat の解析によるハッキング
− https://github.com/nevermoe/unity_metadata_loader/
− https://g...
DeClang 紹介:使い方
開発者 コード Clang アプリ
DeClang 紹介:使い方
開発者
コード
+
config.json
DeClang アプリ
≫ 難読化
DeClang 紹介:使い方
"flatten":
[
{
"name": "PlayerShooting_Shoot_m"
},
{
"name": "^is_jailbroken$"
}
]
//config.json:
≫ 改ざん検知
DeClang 紹介:使い方
"anti_tamper": [ {
"from": "PlayerShooting_Shoot_m",
"to": "EnemyHealth_TakeDamage_m",
"detected":"...
≫ Metadata 暗号化
DeClang 紹介:使い方
"encrypt_metadata": 1
//config.json:
≫ その他のパラメータ
− build_seed
■ build_seed を固定すれば必ず同じバイナリが出来上が
る(デバッグ目的)
■ リリース毎に build_seed を変えればリバーシングの時
間稼ぎになる(セキュリティ目的)
− d...
≫ 社内基本プレイ無料
≫ Unity 対応が優秀
− 検知関数は C / C++ だけでなく、C# も対応
− Unity のビルドフローを意識しなくて良い
− Unity のビルドオーバヘッドが小
− CI インテグレーション(例:Jenk...
Demo
≫ 真ん中の UFO で周りの豆を
とるゲーム
≫ 12個の豆を全部とったら勝つ
≫ 一個の豆をとるだけで勝ち判
定させるようなチートをして
みる
出典:https://github.com/lukearmstrong/unity-t...
Demo
≫ 動画
https://youtu.be/Y-zkDt2e-pI
アジェンダ
≫ 背景
≫ クライアントプロテクション技術
≫ DeClang 紹介
≫ 展望
≫ 技術面
− パフォーマンスプロファイリング
− 既存ライブラリ型の機能を統合
− X86 対応
− 難読化の多様化
■ 文字列暗号化
■ デッドコード挿入
■ アンチディスアセンブル
■ 等
展望
≫ ビジネス面
− OSS化 VS. 商用化
− まず社内展開:CI 組み込みによる普及
展望
≫ DeClang を作った理由
− Unity 対応(使い勝手)
− iOS 対応
− コスト
− パフォーマンス
− 強度
≫ DeClang の技術詳細
− LLVM と Clang をベースに拡張
− DeClang の特徴
まとめ
ご静聴ありがとうございます!
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
Nächste SlideShare
Wird geladen in …5
×

DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】

515 Aufrufe

Veröffentlicht am

クライアントプロテクション技術には、パッキング、難読化、アンチデコンパイル、改ざん検知等様々なアプローチがありますが、本発表ではこれらのアプローチの優劣について検討し、我々のコンパイラ型のクライアントプロテクションツール DeClang をご紹介します。

Veröffentlicht in: Technologie
  • paid surveys and get paid for it? ➣➣➣ https://t.cn/A6ybKmr1
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】

  1. 1. DeClang 誕生!Clang ベースの ハッキング対策コンパイラ 万萌遠
  2. 2. 自己紹介 ≫ 所属 − システム本部セキュリテイ部セキュリテイ技術グループ ≫ 経歴 − セキュリテイエンジニア5年目 − AVTOKYO、DEFCON スピーカー ≫ 業務内容 − 脆弱性診断、セキュリティレビュー、SOC、ログ管理、チ ート調査、セキュリティツール開発等 ≫ SNS − GitHub: https://www.github.com/nevermoe − Twitter: https://www.twitter.com/nevermoecom
  3. 3. アジェンダ ≫ 背景 ≫ クライアントプロテクション技術 ≫ DeClang 紹介 ≫ 展望
  4. 4. アジェンダ ≫ 背景 ≫ クライアントプロテクション技術 ≫ DeClang 紹介 ≫ 展望
  5. 5. 背景:スマホゲームチートの課題 ≫ チート対策を行なっているが、チートは撲滅できていない − メモリ改ざん − 時刻改ざん − バイナリ改ざん − 通信改ざん − フッキング * ここでいう「メモリ改ざん」はメモリ上のゲームデータの改ざんを指し、メモリ上のコードの改ざんは含まれません
  6. 6. 背景:既存対策 ≫ メモリ改ざん => メモリ暗号化 ≫ 時刻改ざん => サーバー時間照合 ≫ バイナリ改ざん => 署名改ざん検知 / ファイル改ざん検知 ≫ 通信改ざん => 通信暗号化 / SSL Pinning ≫ フッキング => アンチデバッグ / コード改ざん検知
  7. 7. 背景:新たな課題 ≫ 上級ハッカーのリバースエンジニアリングによる対策の無力化 − 今までの対策は難読化されていないので解析が容易 ≫ ゲームの脆弱性診断はスケールアウトしない − 高度な解析力と大量な時間が必要 => クライアントプロテクションソリューション => があれば...
  8. 8. 背景:DeClang 誕生! ≫ 商業製品 Or 自作? − お金がない面白いので自作しましょう! − Unity 対応 ■ 強度が強い商業製品はあるが、使い勝手が悪い(コンパ イラ型) ■ 導入しやすい製品は強度が低いまたパフォーマンスが低 い(Packer 型)
  9. 9. 背景:DeClang 誕生! ≫ DeClang = DeNA + Clang ≫ Clang をベースに Pass 機能を用いて拡張 ≫ いわゆるコンパイラ なぜコンパイラ型?
  10. 10. アジェンダ ≫ 背景 ≫ クライアントプロテクション技術 ≫ DeClang 紹介 ≫ 展望
  11. 11. クライアントプロテクション:分類 ≫ 取組み方で分類 − ライブラリ型 ■ リンク時に機能をリンク − コンパイラ型 ■ コンパイル時に機能を挿入 − Packer 型 ■ 出来上がったバイナリに適用 暗号化された 実行データ Unpacking Logic Packing され た 実行ファイ ル 復号された実 行データ オリジナル実 行ファイル メモリ上に 展開 Packer の例:
  12. 12. クライアントプロテクション:比較 ≫ ライブラリ型は実装済なので、コンパイラ型と Packer 型のど れにする?
  13. 13. クライアントプロテクション:強度 ≫ Packer 型 − 静的解析対策(難読化) ■ 全体的 Packing − 動的解析対策 ■ Root 化検知等 ■ 全体改ざん検知 ■ アンチデバッグ ≫ コンパイラ型 − 静的解析対策(難読化) ■ デッドコード挿入 ■ アンチディスアサンブル ■ Control Flow Flattening 等 − 動的解析対策 ■ Root化検知等 ■ 全体改ざん検知 ■ アンチデバッグ ■ 関数粒度の改ざん検知 VS. 😕 😀 ライブラリ型機能 ライブラリ型機能
  14. 14. クライアントプロテクション:パフォーマンス ≫ Packer 型 − アプリの起動時間に影響 ■ 導入見送り事例があり ≫ コンパイラ型 − アプリの実行時効率に影響 − ただしチューニング可能 VS. 😕 😀
  15. 15. クライアントプロテクション:Unity 対応 ≫ Packer 型 − 楽に対応できる ≫ コンパイラ型 − 頑張れば Unity 対応できるVS. 😀 😀
  16. 16. クライアントプロテクション:iOS 対応 ≫ Packer 型 − 動的コード生成は Apple 審査ポリシーに違反する 可能性がある ≫ コンパイラ型 − 動的にコード生成しないの で問題ない VS. 😕 😀
  17. 17. クライアントプロテクション:導入ハードル ≫ Packer 型 − 開発者は何も意識しなく て良い ≫ コンパイラ型 − 守る箇所は開発者が考える 必要がある ■ (逆に)高度なカスタマ イズが可能 VS. 😕😀
  18. 18. Packer 型 コンパイラ型 導入ハードル 😀 😕 Unity対応 😀 😀 iOS対応 😕 😀 強度 😕 😀 パフォーマンス 😕 😀 クライアントプロテクション:まとめ
  19. 19. というわけで 4:2 でコンパイラ型の勝ち
  20. 20. アジェンダ ≫ 背景 ≫ クライアントプロテクション技術 ≫ DeClang 紹介 ≫ 展望
  21. 21. DeClang 紹介:構成 Clang LLVM Optimizer (Frontend Pass) llvm-gcc swiftc C / C++ / ObjC Fotran Swift LLVM X86 Backend LLVM ARM Backend LLVM PowerPC Backend X86 ARM PowerPC LLVM IR LLVM IR (Machine IR’s) Backend Pass ≫ LLVM Project
  22. 22. DeClang 紹介:構成 Clang LLVM Optimizer (Frontend Pass) llvm-gcc swiftc C / C++ / ObjC Fotran Swift LLVM X86 Backend LLVM ARM Backend LLVM PowerPC Backend X86 ARM PowerPC LLVM IR LLVM IR (Machine IR’s) Backend Pass 拡張 ≫ DeClang
  23. 23. DeClang 紹介:機能 ≫ Control Flow Flattening ≫ 関数粒度の改ざん検知 ≫ Unity Metadata 暗号化 ≫ 全体的改ざん検知 ≫ アンチデバッグ ≫ Root 化 / 脱獄 / エミュレータ検知
  24. 24. DeClang 紹介:機能 ≫ Control Flow Flattening ≫ 関数粒度の改ざん検知 ≫ Unity Metadata 暗号化 ≫ 全体的改ざん検知 ≫ アンチデバッグ ≫ Root 化 / 脱獄 / エミュレータ検知 DeClang機能 ライブラリ機能
  25. 25. DeClang 紹介:Control Flow Flattening Control Flow Flattening
  26. 26. DeClang 紹介:Control Flow Flattening Control Flow Flattening
  27. 27. DeClang 紹介:関数粒度の改ざん検知 関数A 関数B
  28. 28. ≫ 関数の prologue に改ざんチェックロジックをインジェクト DeClang 紹介:関数粒度の改ざん検知 関数A 関数B 改ざん検知チェックコード
  29. 29. ≫ 関数の prologue に改ざんチェックロジックをインジェクト DeClang 紹介:関数粒度の改ざん検知 改ざん検知 改ざん検知 チェックコード チェックコード 関数A 関数B
  30. 30. ≫ 関数の prologue に改ざんチェックロジックをインジェクト DeClang 紹介:関数粒度の改ざん検知 関数C 改ざん検知 改ざん検知 チェックコード チェックコード 関数A チェックコード 関数B チェックコード
  31. 31. ≫ 関数の prologue に改ざんチェックロジックをインジェクト DeClang 紹介:関数粒度の改ざん検知 改ざん検知 改ざん検知 3関数4箇所を外さないといけない チェックコード チェックコード 関数A チェックコード 関数B チェックコード 関数C
  32. 32. DeClang 紹介:Metadata 暗号化 ≫ global-metadata.dat の解析によるハッキング − https://github.com/nevermoe/unity_metadata_loader/ − https://github.com/Perfare/Il2CppDumper ≫ 暗号化前後 $ strings global-metadata.dat | grep Player PlayerLoopSystemInternal ... CompletePlayerController PlayerController $ $ strings global-metadata.dat | grep Player $
  33. 33. DeClang 紹介:使い方 開発者 コード Clang アプリ
  34. 34. DeClang 紹介:使い方 開発者 コード + config.json DeClang アプリ
  35. 35. ≫ 難読化 DeClang 紹介:使い方 "flatten": [ { "name": "PlayerShooting_Shoot_m" }, { "name": "^is_jailbroken$" } ] //config.json:
  36. 36. ≫ 改ざん検知 DeClang 紹介:使い方 "anti_tamper": [ { "from": "PlayerShooting_Shoot_m", "to": "EnemyHealth_TakeDamage_m", "detected":"PlayerShooting_TakeDamageTamperDetected_m", } ] //config.json: public class PlayerShooting : MonoBehaviour { public static void TakeDamageTamperDetected { Debug.Log("TakeDamage Function is tampered!"); } } //GameScript.cs:
  37. 37. ≫ Metadata 暗号化 DeClang 紹介:使い方 "encrypt_metadata": 1 //config.json:
  38. 38. ≫ その他のパラメータ − build_seed ■ build_seed を固定すれば必ず同じバイナリが出来上が る(デバッグ目的) ■ リリース毎に build_seed を変えればリバーシングの時 間稼ぎになる(セキュリティ目的) − do_crash ■ 改ざん検知されたらアプリをクラッシュさせるか − probability ■ 改ざん検知を行う頻度(パフォーマンスのチューニング 目的) DeClang 紹介:使い方
  39. 39. ≫ 社内基本プレイ無料 ≫ Unity 対応が優秀 − 検知関数は C / C++ だけでなく、C# も対応 − Unity のビルドフローを意識しなくて良い − Unity のビルドオーバヘッドが小 − CI インテグレーション(例:Jenkins) DeClang 紹介:特徴
  40. 40. Demo ≫ 真ん中の UFO で周りの豆を とるゲーム ≫ 12個の豆を全部とったら勝つ ≫ 一個の豆をとるだけで勝ち判 定させるようなチートをして みる 出典:https://github.com/lukearmstrong/unity-tutorial-2d-ufo-project
  41. 41. Demo ≫ 動画 https://youtu.be/Y-zkDt2e-pI
  42. 42. アジェンダ ≫ 背景 ≫ クライアントプロテクション技術 ≫ DeClang 紹介 ≫ 展望
  43. 43. ≫ 技術面 − パフォーマンスプロファイリング − 既存ライブラリ型の機能を統合 − X86 対応 − 難読化の多様化 ■ 文字列暗号化 ■ デッドコード挿入 ■ アンチディスアセンブル ■ 等 展望
  44. 44. ≫ ビジネス面 − OSS化 VS. 商用化 − まず社内展開:CI 組み込みによる普及 展望
  45. 45. ≫ DeClang を作った理由 − Unity 対応(使い勝手) − iOS 対応 − コスト − パフォーマンス − 強度 ≫ DeClang の技術詳細 − LLVM と Clang をベースに拡張 − DeClang の特徴 まとめ
  46. 46. ご静聴ありがとうございます!

×