Seccamp2020参加記 & 合同ブログ初号

こんにちは。Kmasaです。そして、お久しぶりです。このブログは今年の2月ぐらいからずっと冬眠していたのですが、ようやくお目覚めですね^^

冬眠している間に、もう卒論の提出締め切りの時期が差し迫っています。卒論書くの辛い。実装とか評価実験は終わっているので、あとは卒論書くだけなのですが、日本語の文章書くの本当に難しいと感じている今日この頃です。

 

 

はじめに

なぜ、いきなり冬眠から覚めたのか?と思われる方もいると思いますが、詳しいことは後に説明するとして簡単に言うと、あるコミュニティで合同ブログを書こうという話になり、私がトップバッターになったからですね。卒論提出締め切りとかの日程的なことを考慮すると早いほうが良かった。

合同ブログ初号として、この合同ブログについてと某キャンプの参加記を書きます。

 

経緯の発端

毎年、独立行政法人情報処理推進機構(IPA)と一般社団法人セキュリティ・キャンプ協議会が中心に展開されている情報セキュリティに関する人材育成などを目的とするセキュリティ・キャンプ全国大会があります。Kmasaは2ヶ月間、このキャンプに参加してました。

www.ipa.go.jp

f:id:Kmasa-cysec:20201205144745p:plain

セキュリティ・キャンプ全国大会 公式HP https://www.ipa.go.jp/jinzai/camp/2020/zenkoku2020onlinek.htmlより

 

この記事を書いた理由

このキャンプでは講義以外にも受講生同士の交流というのもあり、7、8人程度の十数のグループに分かれ、キャンプ終了後にグループごとに決めたテーマについて活動していくというものがあります。

我々のグループは

 グループ名:「控えめ関西人

  テーマ :「合同ブログの運営

になりました。

まずはグループ名ですが、「メンバー全員が関西で生存している」ことを前提にしています。「控えめ」はご想像にお任せします(^^)

次に、テーマについては、共通の興味ある分野がなかったので技術寄りのテーマは厳しいという判断になりました。そう言った中、ほとんどのメンバーが今までにもブログなどいろいろ情報発信をしてきた経験があるのだけれど、うまく続かない!!みたいな人が多いよねーという話になりました。そこで、「継続的に活動できる合同ブログを運営していこう!」という案が出て、隔週ペースでメンバーが順番に技術的なブログを更新していく形になりました。

Outputは大事ですよねーー

運営形式についてはしばらく、このHatenaBlogを用いて各自のアカウントでブログを書いてそのリンクを合同ブログアカウントに貼ってまとめる形で進めます。

modestkansaipeople.hatenablog.com

 

***  今後の予定(投稿締め切り)***

  第一号:12/13(日):Kmasa

  第二号:12/27(日):raccooooon

  第三号:  1/10(日):raqqona  

  第四号:  1/24(日):lufe

  第五号:    2/7(日):yecopenn

  第六号:  2/21(日):かよ 

  第七号:    3/7(日):未定   (敬称略) 

 

こんな感じです。ちなみに、ネタが無い!どうしても間に合わない!!みたいな人の救済処置もあるようなないような。

 

Before キャンプ

通常なら夏季に5日間かけて合宿という形で開催されるのですが、今年は新型コロナウイルスの影響で約2か月間、休日にオンライン形式で開催されました。夏頃に応募課題を出し、(なぜか)選考通過したのでビックリ!!っていうのが本音です。実は言うと、初めは(応募課題の内容的に)応募課題出しても通らないなと悟っていました。(こういう人も少なからずいるのではないかなー)そのまま出さないつもりでしたが、忘れたころに応募課題締め切り期間が延長されたことを聞いて、これは何かの縁かなと思ったので、3日間ぐらいで仕上げて(結構しんどかった)ダメでもともとという気持ちで出したら、通ってましたね!(かなり驚いた)

正直、応募課題はほとんど完全解答できなかったが、語りまくることだけに専念しましたね。語るの大事ですね。(キャンプ参加者が強強すぎてずっとビビっていたが...!?)

何がともあれ、参加できることになったので「必ず充実したキャンプにするぞ」という意気込みで臨みました!

 

コースは選択コースと集中コースがあり、私は選択コースのCトラック「脅威解析トラック」を受講しました。もともと、フォレンジック分野には興味があり一番近そうなのがCトラックだったので選びました。

開講してからしばらくして、追加受講の受付があり、今回は特別に選択コースを受講していても集中コースも受講できるということで、よくばりなことに2つのコースを掛け持ちすることになりました。集中コースの方は、Z-Ⅴトラック「Rustで作るLinux向けアンチウイルスソフトウェア」を選びました。

  

タイムテーブル

私の2ヶ月間を振り返ってみると、こんな感じ。

  • 10/18(日)開講式
  • 10/25(日)C1「なぜ、Webサイトは乗っ取られたのか?AWS環境における実践的なインシデントレスポンス」 C2「Long Live the Malware Analysis (Part.1)」
  • 10/31(土)  集中コースゼミ&第一回ハッカソン
  • 11/1(日)C3「Long Live the Malware Analysis (Part.2)」C4「痕跡から手がかりを集める-アーティファクトの発見/分析技術」
  • 11/7(土)集中コースゼミ&第二回ハッカソン
  • 11/8(日)グループワークとかモロモロ
  • 11/14 (土)集中コースゼミお休み
  • 11/15 (日)C5「実践・難読化バイナリ解析(前編)」 C6「実践・難読化バイナリ解析(後編)」
  • 11/21 (土)集中コースセミ&第三回ハッカソン
  • 11/22 (日)C7「最先端のオフェンシブセキュリティ研究入門」D8「セキュリティ啓発マンガの制作」
  • 11/28 (土)集中コースゼミ&最終回ハッカソン&Zトラック合同成果発表会
  • 12/6(日)成果発表&閉講式

 

2か月参加してみて...

 キャンプ期間中はとにかく必死でした。私自身、B4(学部4年生)で研究生であるので、平日は研究、土日はキャンプということでなかなか休む時間が無かった気がします。さらに毎週の講義に対して予習、復習となるとハードスケジュールでしたね(いつもがスケジュール無さすぎたからかも....)。さらにさらに、欲張りで集中コースにも参加したのも大きかったですね。

どの講義もハンズオン形式で、講義の構成は予習を含めることで1講義4時間の限られた中で、解析ツールの有用性を含めた将来を見据えた解析技術について考えることができました!

 

各講義を受けて...

各講義の詳しい内容は同トラックで同グループのraqqonaさんがきれいにまとめている記事があったと思うのでそちらを参考にしてもらえばなと思います!(ごめんなさい。さぼった...)

後日、ちゃんとかく....(と思う)

簡単な感想としては.....

どの日程も非常に興味深い内容だった。フォレンジックに興味があったKmasaにとって、特にC1とC4に関しては実践的なフォレンジック手法を学べて良かった!フォレンジックの勉強というと、どうしてもツールの使い方とかに重きがいってしまい、アーティファクトを抽出するためのロジックや現場で必要となる考え方まで手が回らずにいることが多いのです。(多分.....)

今回の講義ではそういった点が考慮された構成になっていて、かつ実現場に近い形の環境での演習ができたため、これからしっかり復習することを前提すると非常に充実した講義を受講できました!(実は復習まだです....)

 

集中コースでの格闘

前述したとおりですが、私は選択コースのCトラック(メイン)の他に追加募集された集中コースのZトラックのⅤにも参加しました。Z-Ⅴはもともと2人受講生がおられて追加で私とネクストの受講生が入り、計4人でゼミやハッカソンを行っていました。トラック名にもあるように、Linux向けを前提としてアンチマルウェアのソフトウェアをRustで作るという大枠の中で、担当講師の方から提案されたテーマの中から選んで各自実装を行っていきました。

私は、「Rustでbashエミュレータの作成」というテーマで、マルウェアの前段ともいえるダウンローダwget & chmod & exec)の検知をできるようなプログラムを実装しました。(時間的にもbashエミュレータまでいい感じに実装はできなかったが... )

手法としては、正規表現を用いたパターンマッチを利用していています。検知率は提供されたマルウェア検体のデータセットにおいて、82.5%でした。詳しい内容はこちらで

github.com

検知を行っているロジックは非常に単純ですねw

ただ今回、正規表現の調整が非常に大変だった.... 

正直、冗長な正規表現だと思うが(余裕があれば精査したいけど.....)

まぁ検知率が82.5%まで到達したので良かったかなと思います。正直、正規表現はかなり自由度が高く、条件を緩くすれば限りなく検知率はあがります(それこそ、wget,chmod,exec の文字列マッチすればいいみたいな)

けれど、それだとコメントアウトされているものや極端な話、”wgetchmodexec” みたいな文字列があった時点で誤検知があきらかですね。(これなら、grepでいいじゃんってなっちゃう)

なので、ダウンローダで使用される各コマンド実行の対象ファイルの一致判定なども組み込んでいてgrepコマンドとの差別化を図っています。

 

さらに実はここだけの話、これまでにほとんどRustを書いたことがありませんでした。(完全に舐めてますね。もし講師の方が見ていたらすみませんでした)

けれど、追加受講が開始されるまでに必死にRustについて勉強して、ちゃんとZ-Ⅴの応募課題の2(3の途中)まではクリアした(3日間で仕上げた)のでその点は自分でも頑張ったなと思っています。(けれど、初回のゼミはとっても不安でした)

 

とは言ってもRust初学者だったことに変わりはない!

なので今回実装したコードはあんまり綺麗じゃないかも....

最後に、今回せっかくRustを使ったのでこれを機にこれからもRustの勉強をしていきたいと思っています!

After キャンプ

 まず、キャンプに申し込んでよかったと思います。私の場合は申し込み期間の延長があったから今があるんですよね(運がよかった)。今回、オンラインということで合宿形式を経験していないので比較はできませんが、オンライン開催は良かったです。毎週の講義前に予習という形で事前準備ができるということも魅力的ですが、終わったあとも事後学習がしやすいということなので、長いスパンでじっくり成長できるのもいいですね!
卒論を書き終えたら、復習(事後学習)をしたいですね。

 

おわりに

 この2ヶ月間は一瞬でしたが、充実した日々を過ごせたと思います。大学の卒業研究と並行してキャンプに参加するということで少々不安でしたが、日程が詰まっている方がすぐサボるKmasaには良かったかもしれませんね。来年はオンラインになるかオフラインになるかは不明ですが、もし興味が少しでも出たのならまずは応募してみるのもありですよ!(Kmasaは年齢的に受講生として参加するにはネクストしか参加できませんが...)

 

 それでは、、、また(?)、、、