Upgrade to Pro — share decks privately, control downloads, hide ads and more …

解析者視点のための独学

sada
June 16, 2022

 解析者視点のための独学

解析者がどのように技術習得すればいいのかとその独学モデルがあらゆる学習の場で使えることを示すための1例として「プログラムの解析手法とプログラミング言語の習得方法」の話をした。@Ritsumeikan Security Team 2022 脅威解析クラス

sada

June 16, 2022
Tweet

More Decks by sada

Other Decks in Technology

Transcript

  1. 独学 “”語””からみる独学 ⚫Self education ⚫≠learning <- 学校教育 かつ 学習して終わり ⚫Education

    <- ..usually at school, college.. 2022/6/15 Ritsumeikan Security Team 3 ならば selfがつくとどうなる? 結論から言うと行為の主体が””反転””することに加え“”解決“”の解釈が加わる 結果的に自分で問題を見つけ自ら探究をし問題解決できる人間を目指す
  2. やりたいことの発見 運よく“サイバーセキュリティの何か“であることが決まっている ⚫RiSTは幅広い情報分野のなかでセキュリティに関することをすることは 決まっている ただしここで問題が…->セキュリティの領域が広すぎる! そこで ⚫初学者向けに CTF取り組みの前提で必要なことをやるパート ⚫Web Securityを扱うクラス

    ⚫脅威解析を扱うクラス に大別した 大別した理由 ⚫これからは“スペシャリスト”が明るみになる時代 ⚫いろんな分野ができる人より1分野がしっかりできるように積み上げるこ とが大事(もちろんいろんな分野に興味を持って欲しいけどまずは1分野) ⚫初心者からでも2-3年後に“少しわかる”分野を作ることで将来の指針に 2022/6/15 Ritsumeikan Security Team 5
  3. 問題という問題を認識すること(調査編) やりたいことが決まった我々が次に直面する問題 -> 「独学における問題ってなに??????」 ⚫問題すら与えられない 答えだって自分が納得するまでやることにある ⚫「自調自考」が必要である 高等学校までの教育現場における問題 ⚫教員が出すテストの問題が解ければよかった ⚫極めて一元的で単調であり面白くなく”与えられたものを解く”というこ

    とができる人が強者として評価されてきた つまり ⚫当該分野を知り実践を通じて体得するために“解く”べき問題の探索 ⚫それは本当に知りたい分野に真に直結し核となる力をつけ問題を解決す ることにつながる問題なのかという調査に基づいた自問自答をすること 2022/6/15 Ritsumeikan Security Team 6
  4. 詰まった->解決 その瞬間の解読 本質理解との結束 ⚫結局は解決につながる”知識”が不足している ⚫では知識がないことが問題なのか?????? ->X ⚫知識がない結果立ち往生している今の状態 ->これ。 その状態からの脱出 ->目標

    ⚫結局、全部繋がっているので幹と枝と葉の論理プロセスを思い出す ⚫1.手元にない知識の検索 ⚫2.結束を強烈に意識し自分の経験とも照らし合わせながら関連分野を徹 底的に洗い出し解の検討を試みる ⚫3.解の検証の際は””必ず””手を動かしながら実験をし1回1回の自分の操 作に対するPCの挙動を考察する ⚫4.成功したならそれを技術適用して次のプロセスに進む ◼目標の達成!!!!!! 2022/6/15 Ritsumeikan Security Team 11
  5. コラム::知の主体・知の装置 「内破する知」からの引用 ⚫「知」という言葉そのもの解体することができ、その重なりがある ⚫知を内在させた身体は「語る」->しかし語り始めにはその主体は形成さ れていない。語りの過程の中で主体が生み出され創られる ⚫言葉を解釈する間での葛藤や主導権の奪い合いの中で知の主体に「ゆら ぎ」が生じる。 ⚫この「ゆらぎ」が建設的な空間として制度化された知の常識ともいえる 「知の装置」を食い破っていく極めてクリエイティブな所作 知の装置の””問いかけの連続””に本質がある

    ⚫知の主体の日常的実践を通じて絶えず構成され直していくものとして捉 え直すことによって知の主体の集合的な身体の中で作動するものとして 創り変えていく実践 ⚫知の装置を問う == 知の主体の中での権力や制度を問うこと ⚫問いかけを連続することで装置の自動律を狂わせ我々が真に必要として いる欲望している経験の”場”へ知の装置を転換することができる 2022/6/15 Ritsumeikan Security Team 13
  6. 解析の手法とジャンル Offensive Security ⚫静的解析と呼ばれる (x64_dbg, IDA, Ghidraなどを使う) ⚫一般的にパートにわける->パーツ解析->挙動把握 & 変更の流れを踏む

    ⚫デバッグを用いる手法で変数の挙動を適宜確認しながら手を動かす ⚫静的解析の応用にはバイナリエクスプロイトや脆弱性の発見の自動化な どがある Defensive Security ⚫動的解析と呼ばれる (Wireshark, API Monitorなどを使う) ⚫手動による逐次プロセスの考究を要求し変数の挙動は完全に予測に基づ いた観測点に立つ ⚫動的解析の応用にはデジタルフォレンジックによるアーティファクトの 収集などがある 二面性を持って解析の要が出来上がってくる 2022/6/15 Ritsumeikan Security Team 19
  7. 動的解析 逐次プロセスによる考究の要求 ⚫実際にファイルを実行してその実行結果から変数の挙動を読み取る手法 ⚫実行時に発生したファイル、通信、レジストリの情報などを材料として 調査をする どんなメリット・デメリットがある????? ⚫動作を元に確認するので動作の枠の中での解析となって短時間で解析の 結論が出る ⚫特定の条件下では動かないケースがある 最終的には静的解析をちまちまやっていかないと完了しない解析

    ファイルが存在 ⚫マルウェア解析までを視野に入れる静的解析ではx86_64アーキテク チャ、Assembly, CやC++のプログラム読解力、WindowsやLinuxの OSの内部情報、マルウェア解析としての手法、Ghidraなどのリバース エンジニアリングツールの使いこなし..など異常に幅広くそして深い技術 で殴っていく必要がある ⚫ゆっくりでいいから時間をかけて解析->理解していこう 2022/6/15 Ritsumeikan Security Team 22
  8. 静的解析(part2:パーツ内の解析) 任意のパーツを絞り出したあと ⚫関数や変数の役割を予測したり動かしてみて挙動を確認する(逐一、動的 解析することが次の静的解析の手法の発想を生む) ここで2つの枝分かれ ⚫1.原因追求をしていくパターン 開発の場合は区切ったパーツで変更すべき機構とか変数の処理に誤りがあ 流と思うのでそれをどのように修正したらいいのかを考える。 CTF ,

    脆弱性調査の場合は“どの部分の機構が脆弱なのか“をはっきりさせる ⚫2.新しい解決策を生み出さないといけないパターン どのように変更するか、また新しくどのような処理を挿入するかについて 考えていく必要性が生じる 2022/6/15 Ritsumeikan Security Team 24
  9. コラム::可読性の高いコードを目指して 可読性の大別 ⚫1.他人が読んで最短時間で解釈可能なソースコードの記述 ⚫2.論理の指し示しの表記とそれがわかる処理系の流れ 意識したいことは山ほどある!!!!!! ⚫命名法 (汎用名->適材適所な場所での利用と理由の記述) ⚫演算子の選択 (例:ifの条件分岐の時など) ⚫インデント

    (VSCなどの拡張機能を入れておきましょう) ⚫コメント文 (すべきときとするべきでない時がある) ⚫ネストは浅くする (制御フローの簡素化) ⚫変数のスコープは小さく 変数は結構読みやすさの核心に直結します ⚫その工夫としての 関数 構造体 クラス 処理のためにあるもの ⚫配列 オブジェクト <- 変数のためにあるもの ⚫ファイル分け (巨大な式の分割) ⚫ライブラリの有効活用 参考文献::リーダブルコード 2022/6/15 Ritsumeikan Security Team 26
  10. まとめ 独学モデルを実例に落とし込む具体的な方法についてみた ⚫あらゆる勉強にいかせるようにやることに対して自分の型を作ろう ⚫なんとなくやらない ⚫開発においても動かすし考える。その両面を意識 CTFをやろう!! ⚫ここまでの総論と各論を実戦の場で活かしましょう。そうCTF ⚫解析系-> Pwn, Binary

    Exploitとかをやってみましょう ⚫難しかったら…?手を止めてもいいです。その代わりにプログラムを書い てみましょう。プログラムを書くことも解析への第一歩です ◼やってみましょう 手を動かしてみましょう 2022/6/15 Ritsumeikan Security Team 29