2019 Zトラック アンチウィルス実装トラック選択問題 集中開発コースの「アンチウィルス実装トラック」を希望される方は、下記の問題に回答してください。共通問題は必須になります。選択問題は、どれか一つを回答してください。 ただし、テーマの内容は選考を通過した参加者の趣味嗜好や能力によって調整しますので、あくまで案です。 ※共通問題は必須になります。すべてについて、何かしら書いてください。空欄がある場合は選考時に除外します。 ■共通問題1 マルウェア(コンピュータウィルスの総称です、以下マルウェアと統一します)とは何か/どういうことをするものか、自分の考えを書いてください。 ■共通問題2 マルウェアを検知するアイデアを書いてください。どこで、どのようなロジックで、何を検知するのかを意識して書いてください。また機械学習や深層学習のネタを書く時は、実験データや特徴量、アルゴリズムなどをちゃんと書いてください。 ■共通問題3 アンチウィルスソフトウェアでは、しばしば誤検知(過検知)の問題が起こります。誤検知とは、本来マルウェアではないプログラムを、動作や特徴がマルウェアに似ているため、マルウェアと判断してしまうことです。例えば、オンラインゲームのチート防止プログラム、オープンソースな署名がないビデオ再生ソフトなどです。  あなたが作るアンチウィルスでは、このマルウェアに似た動作や特徴を持つプログラムに対して、どのような判断をしていきたいと考えていますか? ■共通問題4 Linuxプログラミングについて、経験がある項目を複数選択してください。 Python, Ruby, Perlなどを用いてコマンドラインアプリケーションを作成したことがある C/C++などを用いてメモリを自身で管理しながら処理をおこなうデーモンを作成したことがある Procfsやシステムコール(libcシステムコールラッパー)を用いてカーネル内の情報を取得、設定するアプリケーション/デーモンを作成したことがある Linux Kernel Module/Linux Security Moduleを作成したことがある Linuxカーネルに機能を追加もしくは修正したことがある Linuxカーネルにパッチを投稿したことがある ■共通問題5 ELFフォーマットのバイナリに関して、知識・経験がある項目を複数選択してください。 コンパイルして実行したことがある gdbなどデバッガを用いてデバッグしたことがある readelf, objdumpを用いてELFフォーマットの情報を見て理解できる LD_PRELOADを用いた関数フックを行った場合の動作を説明できる ELFローダを自作できる ■共通問題6 PE、ELF問わず実行形式のバイナリのマルウェア解析について、経験がある項目を複数選択してください。 VirusTotalの情報を見て、マルウェアかどうかをある程度確信を持って判定できる 動的解析によって、アーティファクト(マルウェアによるファイル、レジストリの新規作成及び変更、削除、通信先、通信ペイロード)を抽出できる サンドボックス(Cuckooなど)の実行結果を用いて、マルウェアかどうかをある程度確信を持って判定できる デバッガを用いてパックされたマルウェアをマニュアルアンパッキングできる ディスアセンブラを用いて静的解析を行い、特定動作のコード部分(例えばアンチデバッグ)を特定できる プロセスのメモリダンプから悪意のあるコードのインジェクション部分を特定し、その挙動を解説できる 選択問題は、学びたいテーマに合わせて回答してください。応募時には何テーマ選択してもOKですが、最終的には1テーマに絞り込んでもらいます。 選択テーマ ※応募時には何個テーマを選んでも構いません。ただし、対応した選択問題を回答してください。 Z1)ELFマルウェアのシグネチャ作成・自動化【リック講師、丑丸講師】 Z2)ELFマルウェア検知エンジンの試作【忠鉢講師、大居講師】 ■選択問題1(リック講師、丑丸講師テーマ、 Z1)に応募する場合に回答してください) Mirai以外のLinuxマルウェアを1種類以上について複数の情報源(ブログ、書籍、公開レポートなど)を基にその特徴をまとめ、できる限り詳細に書いてください。また調査してわからなかったことや疑問点があればそれらも書いてください。 ■選択問題2(忠鉢講師、大居講師テーマ、Z2)に応募する場合に回答してください) ELFバイナリにおけるエントロピー値について、代表的なパック手法の一つUPX(https://github.com/upx/upx)でのパック前とパック後のバイナリの統計的特徴について説明してください。また、アーキテクチャ(例えばx86, arm, mips)毎にエントロピーの特徴があるか、ある場合どのような特徴があるか説明してください。