Security Camp 2017 応募用紙晒し

以下実際の応募用紙です。

※所々内容を伏せているところがありますが、ご了承ください。

 


共通問題
共-1(1).
あなたが今まで作ってきたものにはどのようなものがありますか?
いくつでもいいので、ありったけ自慢してください。


1. 大学の授業の最終課題として、ゲーム作成用のフレームワークenchant.jsを使ってJava Scriptでインベーダーゲームをクラスメイトと共同で作りました。

2. 大学の授業でC++を用いて3Dグラフィックで物体を描画しました。


共-1(2).
それをどのように作りましたか?
ソフトウェアの場合には、どんな言語で作ったのか、どんなライブラリを使ったのかなども教えてください。追加したい機能や改善の案があれば、それも教えてください。


1. インベーダーゲーム
 enchant.jsを用いてインベーダーゲームを作成しました。enchant.jsは、2011年に公開された、ゲームやアプリケーションを簡単に開発することができるHTML5+JavaScriptフレームワークです。(参考:「enchant.js HP」URL<http://enchantjs.com/ja/>
 この最終課題ではステージを主に3種類用意し、各ステージをクリアする毎にその3つのステージが順番に変わっていくような仕様にしました。また、難易度も徐々に上がっていき、ステージ3まではなんとかクリアできるのですが、ステージ4をクリアするのはほぼ不可能でした。
 設計としては、主に以下の要素を組み合わせました。
・背景・モンスター(MOB)などの画像準備(.PNG形式で作成)
・ゲームの説明画面
・ゲームのスタートボタン・リセットボタン
・得点計算のプログラム
・敵への弾の当たり判定のプログラム
・自分への弾の当たり判定のプログラム
・ライフの設定
 実際のゲームの内容としては、次のようになっています。
 スタートボタンを押すとゲームがスタートします。ゲームが終了する、またはゲームオーバーになると得点が表示され、自動的にゲーム開始画面に戻るようになっています。また、途中でゲームを止めたい場合は、リセットボタンを押すとゲーム開始画面に戻るような設定にしました。ゲームオーバーになる条件は、「敵を殲滅する前に敵が最下点まで到達する」「敵の弾が自分に当たり、ライフが0になる」の二つに限っています。
 クラスメイトと共同で作ったもので、私はボタン操作部分の実装やゲーム全体のデザイン、ゲーム説明のWebページなどを主に担当しました。作業をするにあたって、なかなか実際に会って話し合いをすることが難しかったので、Githubを用いて進捗共有をしながら作業をしました。大学に入ってから初めてネット検索以外の用途でコンピュータを使ったので、そもそもGithubの使い方も分からず、苦戦しました。ゲームのデザインの観点からは、はじめは球が当たった瞬間にゲームオーバーにしていましたが、ライフを設定することによって、4回球が当たって初めてゲームオーバーになるように変更しました。ゲームの説明の画面は色分けや文字の大きさを考慮して見やすいように作り、ゲーム画面と説明画面との行き来がしやすく、わかりやすくなるようにボタンの位置など工夫しました。
 改善点としては、ゲームオーバーになった後にリセットボタンが効かなくなることが挙げられます。課題の提出段階ではゲームオーバーになった後にページを再読み込みすることで初期画面に戻れるようにしてありますが、リセットボタンが効くようになるとよりスムーズに遊べるようになると思います。


2. 3Dグラフィックの花火:

 大学の授業でOpenGLやopen frameworksを用いて、C++で3Dグラフィックで物体を描画しました。授業の度に3Dの描画の課題をこなし、大体14個ほどの作品を作り、最終課題は授業で学んだ技術などを用いて独自の作品を作るというもので、私は花火を作品として提出しました。授業で学習したものの中で、パーティクルを描写するものがとても楽しく印象に残っていたので、最終課題でもパーティクルの描写を組み合わせた作品を作りたいなと思い、いろいろな種類の打ち上げ花火の表現に挑戦しました。この作品を作るのにおおよそ三週間ほどかかりました。オーソドックスな同心円状の大輪の花火、しだれ桜のような花火、楕円型に広がる花火、ナイアガラの滝をイメージした横に長く広がる花火を表現しました。特に気に入っているのがしだれ桜のような花火で、枝垂れているように見えるように何度も重力の大きさや連続させるパーティクルの数を調整しました。また、授業でデモンストレーション発表をするために、dを押すとデモ状態に切り替わり、個別にナイアガラの滝を出したい時はnを押せばよい仕様にしました。コードを実行した直後はいくつもの立方体や直方体が画面いっぱいに広がるようにして、画面を上から下にドラッグして動かすとその直方体が建物のようになり、上空で花火が打ち上がるというシチュエーションにしました。課題のプレゼンの時も様々な種類や色、大きさの花火が好評でとても嬉しかったです。
github URL<https://github.com/Yumeme/grapro_c_plus/tree/master/src_myfireworks>

 
共-1(3).
開発記のブログ、スライドなどの資料があれば、それも教えてください。コンテストなどに出品したことがあれば、それも教えてください。


speaker deck(スライド資料):<https://speakerdeck.com/yume>


共-1(4).
Twitterアカウント、Github、ブログをお持ちでしたら、アカウント名、URL等を記載してください。


Twitterアカウント:ymyumeme
Github:<https://github.com/Yumeme>


共-2(1).
あなたが経験した中で印象に残っている技術的な壁はなんでしょうか?
(例えば、C言語プログラムを複数ファイルに分割する方法など)


1、プログラミングの経験がなかったため、C++のコードが何を表しているのかわかりませんでした。入学して一学期目に、授業の趣旨がよくわからないままC++でひたすら3D描画をするコードを書く授業を履修してしまいました。その授業がプログラミング系授業の中で最も難易度の高い授業で、さらに授業があった次の日までに課題を提出しなければならないといういわゆる「えぐ単」だったので、プログラミング経験がなかった私には大きな試練でした。

2、マルウェアを静的解析し、特徴量を与えて機械学習で分類する研究を進めている時に、機械学習アルゴリズムにかませる特徴量を何にするかでつまづきました。


共-2(2).
また、その壁を乗り越えるためにとった解決法を具体的に教えてください。
(例えば、知人に勧められた「○○」という書籍を読んだなど)


1、はじめは授業で提供されたサンプルコードをひたすら写経して、そのプログラムを少しずつ変えながら何を表しているのかを探っていました。エラーがどうしても解決できないときは、先生やSAさん(学生の授業アシスタント)に質問していました。家で作業をしている時はエラーメッセージを検索にかけたり、フレームワークの公式リファレンスを見たりしていました。この時は技術書を読むという考えがなかったので、今考えてみれば技術書を読んでみるべきだったかなと思っています。毎週授業が終わってから次の日の提出日まで睡眠時間が確保できず意識朦朧としながらコードを書いていましたが、追込み力のようなものがついたので、頑張ってよかったと思います。

2、はじめはAPIの呼び出し回数を特徴量としようとしていましたが、今回の研究では動的解析は扱わないのにAPI呼び出しの回数を特徴量としてもあまり意味がないのでは?と気がつき、同じような研究をしていた人の卒論を読んだり、同じ分野を学んでいる先輩に勧められた本や、その他の関連研究の論文を読みました。最終的に、マルウェアが使うAPIのリストを特徴量として抽出しようという結論に至りました。
<参考文献>
・「学位論文 博士(工学) マルウェアの特徴的振る舞いの誘発によるマルウェア対策手法に関する研究 2013 年度 慶應義塾大学大学院理工学研究科 糟谷 正樹 」
・「On the Security of Machine Learning in Malware C&C Detection: A Survey
JOSEPH GARDINER and SHISHIR NAGARAJA, Lancaster University 」
・「Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう」著:クジラ飛行机, 2016
・「scikit-learn:machine learning in Python」URL<http://scikit-learn.org/stable/>


共-2(3).
その壁を今経験しているであろう初心者にアドバイスをするとしたら、あなたはどんなアドバイスをしますか?


1、ひとまず手をひたすら動かしてみることが大切なんだと思います。技術書を読むと言いましたが、技術書に書いてあることを理解はできても、実際にコードを自分で書き起こしてみると新たな疑問が出てくることがあるので、ただ読むだけではなく、手を動かしながらの方が身につくと思います。

2、同じ分野の研究をしている先生や先輩方に、オススメの本がないかなど聞いてみると色々な話が聞けていいと思います。また、研究をするにあたって様々な文献や論文にあたると思いますが、信憑性に欠ける論文つまり査読の付いていない論文は特に読んでもプラスにならないので、積極的に査読付きの英語の論文を読むことをアドバイスしたいです。

 

共-3(1).
あなたが今年のセキュリティ・キャンプで受講したいと思っている講義は何ですか?(複数可)
そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか?


【A1】PowerShellベースのマルウェアとその防御手法
 この講義で扱う予定の「ファイルレスマルウェア」というものを今回の授業概要を見て初めて知り、興味を持ちました。また、私はMacユーザーで、Windowsを標的としたマルウェアはまだ解析したことがありません。Macの中にWindows VMを建てて解析をしてみようと試みましたが、ホストのMacBookAirのメモリが4GBであるがためにすぐにフリーズしてしまい、断念しました。マルウェアWindowsを標的としたものが多いので、近いうちにWindowsのライセンスを買ってWindowsVM環境を用意したいと思っています。Windows対象のマルウェア解析の経験や標的型攻撃に関する知識がないため、この講義でその点を学びたいです。
 少し調べてみたところによると、ファイルレスマルウェアはとても高度な知識を要求されるため、まだあちらこちらに出回っているというわけではないらしいのですが、私が今までに知っていた他のマルウェアとは違い、ディスクにファイルを残さずにメモリに潜んでマシンが元々持っているコマンドを実行し、従来のセキュリティソフトに検知されることを回避している曲者のようです。ファイルを残さないファイルレスマルウェアをどのように解析すれば良いのかは今は見当がつかないので、動作や対策方法など、講義でしっかり押さえたいです。


【A2~3】AIのデータ汚染を検知しよう
 近頃、人工知能(AI)は機械学習よりも高いパフォーマンスができるということから、様々な方面で活用しようという動きが盛んになっています。機械学習は人間が学習させたいデータの特徴量を与え、機械が学習し、テストデータでチェックをした後、実際のデータを分類や判別します。このとき、学習させるデータが適していないと、機械にいくら学習させても期待通りの分類や判別はしてくれません。裏を返せば与えるデータを見極めれば学習の方向性を人間側がコントロールすることができます。一方人工知能の場合、データを与えるだけでそのデータの何を学習するかということを機械自身が選択して学習を進めます。そのため、機械学習よりも学習の方向性をコントロールすることが難しく、どのようなデータを与えるか慎重に考える必要があります。
 人工知能には以上のような特性があるため、学習の方向性を曲げるような汚染データの検知は必要だと考えられます。人工知能に関しては知識がないので以下は単なる憶測ですが、もし人工知能Aに対する汚染データを人工知能Bで検知しようとすると、人工知能Bに対する汚染データもまた別の人工知能Cで検知しなければならない…というようないたちごっこになってしまうような気がしています。機械学習の次は人工知能に手を出してみようと考えているので、学習の妨げになる汚染データへの対処方法を学んでおきたいです。


【D4】マルウェア x 機械学習
 この講義は、ずばり私の研究しているテーマで、絶対に受講したい講義の一つです。機械学習によってマルウェアを検知するにあたって、同じ特徴量を与えても機械学習アルゴリズムの種類によって検知率は変動しますし、同じアルゴリズムを用いても特徴量が異なれば同じサンプルデータであっても検知率は変化します。私が今学期の研究の目標としているのが「複数の異なる機械学習アルゴリズムマルウェアAPIリストを特徴量として与えた時の検知率の違いを評価する」ことです。マルウェアの種類ごとに与えるべき特徴量も変わってくると思うので、今回はすべてのマルウェアに共通している(おそらく)APIリストを特徴量に設定しましたが、今後は他の組み合わせも考えていきたいです。
 この機会に、マルウェア機械学習をテーマにしていく上で意識していかなければならないこと、そして身に付けるべき技術を習得したいです。

 

【D5】The Anatomy of Malware
 この講義ではマルウェアの特徴や攻撃手法、攻撃者の意図など、マルウェアそのものについて知識を深めたいです。また、講義ではマルウェアの逆アセンブルコードを読み解く静的解析手法を学び、マルウェアのコードをひたすら読み解くと書いてありました。私は個人研究の中で、マルウェアを逆アセンブルして静的解析をするという手法を用いましたが、その際に逆アセンンブルコードをうまく読み解くことができず、現在「たのしいバイナリの歩き方(著:愛甲 健二, 2013)」を読み進めている途中です。コードを読んで理解する作業でかなり苦戦している状態なので、この講義で講師の方に効率のよいコードの読み解き方を教えていただき、研究に役立てたいです。


【E6~7】インシデントレスポンスで攻撃者を追いかけろ
 将来は企業のセキュリティエンジニアとして働きたいと考えています。大学ではマルウェアについて研究している人は他の分野に比べて少なく、また授業ではなかなかマルウェアを動的に解析したり、マルウェアそのものを扱う機会はありません。そのため、今回の講義のような仮想のインシデントが発生した環境のデータを用いてインシデントレスポンスをどのように行うのかということを、実務経験豊富な企業の方々から学べる機会はとても貴重なものだと考えています。私は、マルウェアという扱いを一歩間違うと加害者となってしまうようなものを研究対象としているため、万が一の場合にどう対処すべきなのかを知っておかなければならないと研究を進めていく程強く感じるようになりました。この知識は今後の研究のためにもなりますし、社会に出てからもセキュリティエンジニアとして必要不可欠なスキルだと考えています。
 個人研究では静的解析しか扱ったことがないため、これを機に動的解析にも挑戦してみたいです。また、トロイの木馬など数種類のマルウェアしか扱ったことがなく、論文もマルウェア自体に関してというより機械学習マルウェアを分類あるいは検知するという趣旨のものばかり読んでいたため、マルウェア自体の知識はまだ浅いのが現状です。準備期間でマルウェアの種類ごとの違いや、その違いに伴った解析方法やツールの適性、攻撃手法について文献にあたり、必要に応じて自前の仮想環境下で解析を行ってみたいと思います。
 加えて、最近よくIIJさんのCM(もしもインターネットがなかったらシリーズ)をテレビで面白いな、と思いながら見ていたので、担当の講師の方がIIJから来てくださるということで、その点でも興味を持ちました。大手企業にセキュリティサービスを提供しているIIJさんが実際の現場でどのようにインシデントレスポンスをして危機回避をしているのかを積極的に学び、将来に活かしていきたいです。


共-3(2).
あなたがセキュリティ・キャンプでやりたいことは何ですか? 身につけたいものは何ですか?(複数可)
自由に答えてください。


 興味分野がマルウェア機械学習なので、そのテーマを扱った講義を中心に取っていきたいと考えています。各方面から経験や知識が豊富な講師の方々の講義を受けることができるこの機会を最大限に生かしたいです。
 身につけたいスキルや知識は、実際にマルウェアを解析してそのマルウェアの特徴や攻撃手法を逆アセンブルコードから読み取るスキル、実際にマルウェア感染やサイバー攻撃を受けた時の対処方法、Windowsをターゲットとしたマルウェアや攻撃手法に関する知識やWindowsターゲットのマルウェアや特殊なマルウェアの解析経験、機械学習人工知能(AI)に関する知識、自分が意図した通りに機械に学習させるコツです。どれも将来就きたいと考えている「セキュリティエンジニア」や現在研究テーマとして掲げている「機械学習マルウェア解析」に直結するものばかりです。特に、現在研究で行き詰っているところが解消できたらいいなと思っています。
 前の共通問題でも触れましたが、大学に入ってから初めて自分のコンピュータでプログラミング等のネット検索以外の作業をしたため、本当に情報系の分野は分からないことしかありませんでした。実のところ受験をした時は、素粒子物理学の研究をしようと考えていて、実際に受けたのはSFC以外は全て物理学科だったのですが、1年から研究室に入れることや自由さに魅力を感じ、思い切って新しいフィールドに飛び込んでみました。毎日新しい知識が頭に入ってきますし、周りには圧倒的技術力を持った方々が沢山いて圧倒されますが、とても充実していて、今はこれで良かったんだなと日々感じています。そんな調子で大学入学当初にブラインドタッチでタイピングをする練習をしていた私が、今ではマルウェア解析や機械学習の勉強をしているのは自分でも成長したなと感じています。SFCは1年の頃から研究室に所属でき、様々な情報系の授業があります。そういったことも成長の助けになっていると感じていますが、ただその環境に居るだけでは成長できないと最近よく感じるようになりました。
 千利休が茶道の教えを詠んだ百首、利休道歌というものがありますが、その中に「はぢをすて人に物とひ習ふべしこれぞ上手のもとゐなりける」という句があります。知らないことは恥じらわずに誰かに聞いてこそ上達するという意味です。この考え方は新しい何かを学ぶにあたって上達の鍵となるものだと感じていて、私がなんとか今の状態まで成長できたのも、情報分野に疎いことを恥じて質問しないのではなく、周りの人達に積極的に質問をしてアドバイスをもらっていたからこそだと思っています。セキュリティキャンプに参加するにあたって、分からないことや知らないことが山のように出てくると思いますが、この精神で一つ一つ解決し、一回りもふた回りも成長したいと思っています。
 上に述べたように、セキュリティキャンプでは色々な講義で刺激を受けて今後に生かすというのが大きな目標ですが、同じような興味を持っている人との交流もとても楽しみにしています。IT勉強会などのイベントにも参加したいと考えていますが、まだその勇気が持てずにいるので、セキュリティキャンプに参加している人と仲良くなって勉強会に参加したり、あるいは勉強会を開催したりできるようになりたいです。より外部の活動に精力的に参加する始めの一歩にしたいと思います。また、IT方面だけでなく、他の方面でもオタクな方々もいらっしゃると思います。個人的な趣味ですが、中学から茶道を習っており、他にも日本の伝統芸能、落語や歌舞伎が大好きなので、話の合う方がいらしたら嬉しいです。
 初めての応募ですが、セキュリティキャンプの事前準備やキャンプを通して大学生活では得られない専門的かつ実践的なスキルを身につけ、何事も今後の研究及び将来に活かせるように知識や技術に貪欲になることを意識して取り組んでいこうと思います。まずは、目標となるCTFや外部のコンテスト、勉強会などのイベントに参加する前の通過地点としてセキュリティキャンプを位置づけ、色々な方々からお話を聞いて刺激を受けようと思います。密度の高い5日間にしたいと思います、よろしくお願いします!

  
選-A-2.
機械学習の弱点は何だと思いますか?

 まず一つに計算コストが低く、簡単な問題に対しては学習が比較的早く終了するため向いている一方で、複雑な問題には対応しづらい点です。ここでいう複雑な問題というのは、物体認識や感情分析、コンピュータビジョンなどの複雑な工程を必要とするものを指しています。また、機械学習でモデルを作る際には、プログラマ側が何を特徴量をするかを決め、データから特徴量を取り出す、特徴抽出という作業を必要とするため、特徴抽出はプログラマの腕次第で、複雑になればなるほど、特徴量の抽出は難しく大きな負担となってしまいます。しかしこれは機械学習の一つ上の段階である深層学習に任せれば、特徴抽出をプログラマ依存ではなく行うことができるので、あまり重要視しなくてもよい問題点だと考えられます。
 次に、過学習です。過学習が起こる主な理由は「学習データ不足」と「データの中に適切でないデータが多く混ざっている」というものです。学習データが足りないと、少ないデータを複雑に学習し、モデルが必要以上に複雑化してしまいます。これはデータを十分増やすことで解決することができ、例えば機械学習アルゴリズムフレームワークであるscikit-learnのアルゴリズムチートシート<http://scikit-learn.org/stable/tutorial/machine_learning_map/>を見ると、最低のサンプル数が50となっています。私はこの中でもクラスタリングアルゴリズムを用いた研究をしているので、10000ほどのサンプルが必要になります。また、データの中に適切でないデータが多く混ざっているとたくさんの適切でないデータの影響を受けて、偏ったモデルができる原因となってしまいます。この問題はクロスバリデーションで回避することが可能で、個人の研究でも過学習を防ぐためにこの手法を用いる予定です。クロスバリデーションとは、サンプルデータを幾つかに分割し、まずはその一部を学習させ、残りのサンプルデータをテストデータとして扱ってテストを行い、作成したモデルが正しく学習できているかを確かめる手法です。
 三つ目は、機械学習を使っている側は機械学習アルゴリズムの仕組みなどの根本的な原理を理解せずにツールとして用いることが多い為、「機械学習を用いて〜」などと言って、実際の具体的な処理がブラックボックス化してしまうという点が問題だと感じます。実際にどのようなアルゴリズムを使い、どのようなデータをどのくらいの数だけ与え、何を特徴量として抽出したのか、これらはすべて機械学習のモデルの出来を左右するものであるのにも関わらず、不明確なことばかりです。これは機械学習そのものに帰属する弱点ではありませんが、技術は使う人がいて成り立つものだと考えているので、ユーザビリティに関しても考慮しなくてはいけないと思います。最近、「機械学習で〜を実現しました」「機械学習を用いて他の製品より検知率を上げました」のような、「機械学習」という言葉に頼りすぎて肝心の中身が不明瞭なものが多いなと感じていたので、問題点として取り上げました。

 
選-A-7.
Same Origin Policyに関する脆弱性から自分がもっとも気になっているものを選び、その脆弱性がどのようなものかを説明してください。次に、あなたがもし悪意を持つ側だとしたら、その脆弱性をどのように悪用(活用)するかを想像して書いてください。

 Same Origin Policyに関する脆弱性の中で、クロスサイトスクリプティングXSS)を例にあげたいと思います。XSSとは、例えば掲示板やサイト内検索、アンケートなど、ユーザの入力内容をWebページに表示するWebアプリケーションに脆弱性がある場合、悪意を持ったスクリプト(Webブラウザ上で実行される命令)を攻撃者に埋め込まれてしまい、入力データに紛れ込んだスクリプトを見逃してHTML文書に組み込んでしまうことで、攻撃者側が偽のページを表示することが可能になってしまうというものです。あくまでもXSSの攻撃対象となるのはユーザの入力に対して動的にHTMLページを生成するアプリケーションで、静的な、通常のHTMLページではこの問題は起こりません。
 実際のXSS攻撃の流れは次のようになります。
1、ユーザが攻撃者が仕組んだ悪意のあるページにアクセスする
2、リンクが載っているページがユーザが見ているブラウザに表示される
3、ユーザがリンクをクリックする
4、ユーザの意図に反して攻撃者が攻撃対象として選んだ、脆弱性のあるサイトにスクリプトを含んでアクセスする
5、スクリプトを含んだページがユーザが見ているブラウザに表示される
6、ユーザの使っているブラウザ上でスクリプトが実行される
 HTML5の出現によってHTMLの構造が複雑になり、今までとは異なった経緯でのXSS脆弱性が見つかったそうです。(「HTML5を利用したWebアプリケーションのセキュリティ問題に関する調査報告書(JPCERTコーディネーションセンター, 2013公開)」より)JPCERTコーディネーションセンターの調査レポートによると、4つが新たに見つかったそうですが、今回はHTML5の出現に伴った新要素と新属性によって引き起こされるXSSについて説明します。
 従来のHTMLではon errorイベントハンドラを指定する要素があり、動的に生成されるHTML文書中のon errorの値に攻撃者がJavaScriptを埋め込んでエラーを引き起こすことでXSS攻撃を行っていました。一方、HTML5で新しい要素がいくつか追加されたが、<video>要素や<source>要素ではon errorイベントハンドラがサポートされており、攻撃者が埋め込んだスクリプトが実行されてしまいます。今まではユーザ側のクリックや入力などの操作が必要だったのに対し、HTML5の登場によって、HTML5に追加された一部の属性とユーザの操作が必要なものとを組み合わせることでユーザの操作なしにXSS攻撃を行うことが可能になっているそうです。
 よりSOPに関連したブラウザの脆弱性は、Internet ExplorerIE 6~7)の古いバージョンのdocument.domainの実装にSOPバイパスの脆弱性があったというものが挙げられます。documentオブジェクトとdomainプロパティをオーバーライドして書き換えてしまうことで簡単に悪用することが可能で、XSSの一環としてこの脆弱性を利用することでSOPをくぐり抜け、他のオリジンとの双方向通信を確立することができてしまいます。この脆弱性を利用できるのは古いバージョンのInternet Explorerのみで、最新のバージョンでは使えません。そのため、この脆弱性を悪用するためには、ブラウザのアップデートを怠っているユーザを狙うことが必要となります。脆弱性のCVE番号を特定しようと思ったのですが、バージョン違いでいくつもあり、うまく特定しきれませんでした。
 自分がもし悪意を持つ側だとしたら、XSSを用いて個人情報を引き抜き、個人情報をブラックマーケット上で高値で取引しようと思います。XSSではユーザに、こちらが仕組んだ悪意のあるページにアクセスし、リンクをクリックしてもらわなければ攻撃が成立しないので、攻撃をする際にはその点をユーザが違和感なく行ってくれるように「30秒後に<~クリックしてほしいURL~>に移ります」などのメッセージを表示してリンクをクリックしやすくするなどの工夫が必要だと思います。ですが、HTML5の登場によってユーザ側の操作がなくてもXSS攻撃が可能になっているようなので、HTML5の「on」から始まらない名前の属性で、値としてスクリプトを指定できるものを用いてXSS攻撃の検出を避けられるようにすることでより多くの個人情報を抜き取ることができると思います。


*Webセキュリティには疎いので基本的な用語から調べました。以下でこの選択問題に解答するにあたってSame Origin Policyに関して調べて得られたことをまとめます。
 Same Origin Policyとはあるオリジンから読み込まれた文書やスクリプトに対して、そのリソースからオリジンのリソースにアクセスできないようにするもので、Webセキュリティにおいて重要な仕組みとなっている。
 「Origin」は「The Web Origin Concept」で定義されており、スキーム、ホスト、ポートの組み合わせで、それらが同じものは同一オリジンとして扱われる。https://yume.jp/sfcを理にすると、スキームは「https」、ホストは「yume.jp」、ポート(アプリケーションを識別する番号)は「80」となる。<https://yume.jp/sfc>と<http://yume.jp/sfc>を比較すると、ホストとポートは一致するが、スキームが「https」と「http」で異なっているので、同じオリジンではない「クロスオリジン」とみなされる。
 例えば、CanvasWeb Storage、X-Frame-Optionsなどはオリジンに依存して操作が制約される。他のWeb上の様々な操作に関しても、対象が同一オリジンの場合には制約がなくリソースの読み書きが可能になるが、クロスオリジンの場合にはリソースの読み書きが禁止になる(原則として)。CookieやHTTP認証などはオリジン以外をベースに動作の制約に定めている。クロスサイトスクリプティングXSS)は、オリジンを超えてスクリプトを挿入する攻撃の手法。理解不足で書いていることが誤っているかもしれませんが、XSSでダイアログボックスを表示させた時のURLをURLエンコード方式でデコードすると<script>で書かれたコードの一部分になる点が面白いと思いました。
<参考>
・「The Web Origin Concept」
URL<https://tools.ietf.org/html/rfc6454>
・「Same Origin Policy とは何なのか。 - 葉っぱ日記」
URL<http://d.hatena.ne.jp/hasegawayosuke/20130330/p1>
・「HTTP access control | MDN」
URL<https://developer.mozilla.org/ja/docs/Web/HTTP/HTTP_access_control>
・「HTML5を利用したWebアプリケーションのセキュリティ問題に関する調査報告書(JPCERTコーディネーションセンター, 2013公開)」
URL<https://www.jpcert.or.jp/research/html5.html>からダウンロード可能
・「IPA 独立行政法人 情報処理推進機構 クロスサイトスクリプティング
URL<https://www.ipa.go.jp/security/vuln/vuln_contents/xss.html>

 
選-A-8.
いわゆる「セキュリティ技術」の中で、あなたがもっとも興味があるテーマひとつについて、好きなだけ語ってください。


マルウェア解析」
 大学では〇〇研究室に所属しており、その中でセキュリティ分野の研究をしている〇〇と言うグループに所属しています。私はセキュリティ分野の中でも低レイヤーのマルウェア解析に興味を持っています。マルウェア被害増加の現状と既存のバッチ学習では新種のマルウェアに対応できないという点に問題意識を持ち、機械学習マルウェア解析を組み合わせることによってより効率的に、そして新種のマルウェアにも対応できるようにできないだろうかと考え、研究をしています。
 ホストのMacBookAirに仮想環境Vagrant(Ubuntu 64-bit)を立て、仮想環境下でマルウェア検体をAbyss Watcher<https://github.com/ntddk/Abyss-Watcher>を用いてダウンロードします。Malware Domain List, VX Vault, Malc0deの三つのURLからマルウェア検体がランダムでダウンロードされます(重複することもあり)。マルウェア検体をダウンロードする際には足跡がつくことでこちらがマルウェアを解析しているということを悟られにくくする目的でtorを用いました。この操作をする間は自分で入れたセキュリティソフトの機能をオフにしておかないと次々とマルウェア(ほとんどがトロイの木馬でした)が検出され、収拾がつかなくなり、control+Cを連打する羽目になったので、セキュリティソフトの機能をオフにしてから行うようにしました。ダウンロードが完了するのに10分ほどかかりました。ダウンロードが終了したら、ダウンロードしたディレクトリに移り、treeコマンドで検体がダウンロードされているか確認します。その後、ダウンロードした検体の中から一つ選び、objdumpで逆アセンブルします。今回は「objdump -d」という、objfileの機械語命令に対応するアセンブラニーモニックを表示し、命令を含むと考えられるセクションのみを逆アセンブルするコマンドを用いました。下に実際のコードを示しますが、objdump -dの結果が長いため中略しました。「objdump -D」とすると、すべてを逆アセンブルするため、「objdump -d」で得られた結果よりもかなり長くなります。ニーモニックの部分の意味は、「push」はスタックにデータを書き出す、「call」が主プログラムから副プログラムを呼び出す、「xor」が排他的論理和(XOR演算)を行う、などの意味があります。逆アセンブルして得られたこれらの情報を効率的に読み解けばマルウェアの特徴などが見えてくると思うのですが、まだうまく読み解ける段階になっていません。セキュキャンでの講義を通して逆アセンブルコードを読み解くことができるようになりたいです。

 

ここでは省略しますが、最後に検体ダウンロードから逆アセンブルまでの流れをまとめました。実際に使ったコマンドや、どのような手順でどのような結果が出たのかわかりやすいように実際のデータなども書いておきました。

 

 

最後までお読みくださり、ありがとうございます。

お粗末様でした。