kotamanegiの取り扱い説明書

のんびり趣味の事を書いてます。

セキュリティ・キャンプ2016に応募してみた!(後編)

後編の選択問題です。2,4,7,9を選択しました。

 

 

選択問題2:

1.SSL/TLS接続を確立している。このことから、Googleに似せた偽サイトを識別する効果や、検索履歴などといった個人情報を保護する効果が期待できる。
2.あまりにも長い文字列を検索するとerror 400を出す。このことで、バッファオーバーフロー系の攻撃を防いでいると考えられる。
3.ハッキングされた可能性があるサイトを表示している。このことで、利用者がウイルス感染したサイトにアクセスすることを防いでいる
4.検索ランキング決定のアルゴリズムを定期的に変更している。このことで、悪質なサイトがSEO対策などを駆使してランキング上位に表示されることを防いでいる。
5.存在しないサイトを表示した場合には特別なエラー画面を表示している。このことで、エラーの原因などが表示され、その情報が悪用されることを防いでいる。
6.大量に検索リクエストを送信するなど、不正なトラフィックが検出されると画像認証(Captcha)を要求する。これで、BOTによるDDoS攻撃などを防いでおり、またウイルス感染したパソコンの利用者に警告を出している。
7.googleの検索に表示される広告は審査されている。このことで、広告としてウイルスサイトが表示されてしまうのを防いでいる。
8.特殊文字(=とか'とか)が入力されると、エスケープ処理を行っている。これで、SQLインジェクションとかXSSなどを防いでいる。
9.(セキュリティ対策といえるのかはわからないけれど)Webブラウザーのバージョンに応じてサイトのデザインを変えている。
このことで、サポートされていない機能を使ってしまい、脆弱性を埋め込んてしまうのを防いでいる。

 

 

選択問題4:

#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#define  _SCL_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <utility>
#include <functional>
#include <cstring>
#include <queue>
#include <stack>
#include <math.h>
#include <iterator>
#include <vector>
#include <string>
#include <set>
#include <math.h>
#include <iostream>
#include<map>
#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <list>
#include <set>
#include <cstdint>
#include <stdint.h>
#include <intrin.h>

/*
#include <Windows.h>
uint64_t rdtsc() {
return __rdtsc();
}

unsigned MemoryUsageMegaBytes(void)
{
MEMORYSTATUSEX m = { sizeof m };
GlobalMemoryStatusEx(&m);
return (unsigned)(((512 * 1024) + (m.ullTotalVirtual - m.ullAvailVirtual)) / (1024 * 1024));
}
*/
using namespace std;
string valid_order_brand[3] = { "BlueMountain","Columbia","OriginalBlend" };
string invalid_order_brand[2] = { "DandySoda","FrozenEvergreen" };
int main() {
FILE* fp;
fp = fopen("pyonpyon.rh", "rb");
if (fp == NULL) {
cout << "FAILED READING";//読めなかった場合
return 0;
}
/*
long long hoge_hoge = rdtsc();//最初のCPUクロックカウンタの値
*/
while (feof(fp) == 0) {
char Magic[2];
char Source[20], Destination[20];
char DataLength_base[4];
fread(Magic, sizeof(char), sizeof(char) * 2, fp);//Magic部の読み込み
fread(Source, sizeof(char), sizeof(char) * 20, fp);//Source部読み込み
fread(Destination, sizeof(char), sizeof(char) * 20, fp);//Destination部読み込み
fread(DataLength_base, sizeof(char), 4, fp);//とりあえずcharで読み込む
//c++なら
string st_Data;
string st_Source;
string st_Destination;
uint16_t DataLength = 0;
for (int i = 0;i < 4;++i) {
DataLength += (int)DataLength_base[3 - i] * pow(256, i);//変換
}
for (long long i = 0;i < DataLength;i++) {
//一文字ずつ読み込み -> Dataに収納
char hoge_hoge;
fread(&hoge_hoge, sizeof(char), sizeof(char), fp);
st_Data.push_back(hoge_hoge);
}
for (int i = 0;i < 20;++i) {
if (Source[i] != 0) {
st_Source.push_back(Source[i]);
}
if (Destination[i] != 0) {
st_Destination.push_back(Destination[i]);//char -> stringに変換
}
}
bool failed = false;
if (Magic[0] != 'R' || Magic[1] != 'H') {
failed = true;
}//Condition 1
string small_Source = st_Source, small_Destination = st_Destination;//下ごしらえ
transform(small_Source.begin(), small_Source.end(), small_Source.begin(), tolower);
transform(small_Destination.begin(), small_Destination.end(), small_Destination.begin(), tolower);
//小文字に変換完了
string valid_Source[2] = { "rise-san","cocoa-san" };
string valid_Destination[2] = { "chino-chan","chino" };
if (small_Source != valid_Source[0] && small_Source != valid_Source[1]) {
failed = true;//Condition 2
}
if (small_Destination != valid_Destination[0] && small_Destination != valid_Destination[1]) {
failed = true;//Condition 3
}
if (st_Source == "cocoa-san"&&st_Destination == "Chino") failed = true;//Condition 4
for (int i = 0;i < 3;++i) {
//Condition5を満たすか
if (st_Data.find(valid_order_brand[i]) != std::string::npos) {
goto ok;
}
}
failed = true;
ok:;
for (int i = 0;i < 2;++i) {
//Condition6を満たさないか
if (st_Data.find(invalid_order_brand[i]) != std::string::npos) {
failed = true;
}
}
if (failed == true) {
cout << "REJECTED" << endl;
}
else {
cout << "PASS" << endl;
}
/*
cout << rdtsc()-hoge_hoge << endl;//1回あたりのCPUサイクル出力
cout << MemoryUsageMegaBytes() << endl;//1回あたりのメモリ使用量出力
*/
}
/*
cout << rdtsc()-hoge_hoge << endl;//全体のCPUサイクル出力
cout << MemoryUsageMegaBytes() << endl;//全体のメモリ使用量出力
*/
return 0;
}
/*
メモリ使用量は19MegaByteで、これはプログラムの実行中に取った値と最後に取った値
が同じだった。だから、データ容量はあらかじめ確保されてると考えられる。
もしかしたら最初に入力データをすべて読み込んでるのかもしれない。
CPUクロック数は最終的に 8877096 になった。しかし、何回も実行していると 値が変わっていたので、実行時の状況に依存していると思う。こちらは、当然プログラムの実行中に取ったデータと最後に取ったデータでは差があった。

*/

/*

実行結果:

PASS

PASS

PASS

PASS

PASS

PASS

PASS

PASS

PASS

REJECTED

PASS

PASS

PASS

REJECTED

REJECTED

PASS

PASS

PASS

REJECTED

REJECTED

REJECTED

PASS

PASS

PASS

REJECTED

REJECTED

REJECTED

REJECTED

PASS

PASS

PASS

REJECTED

REJECTED

REJECTED

REJECTED

REJECTED

PASS

PASS

PASS

REJECTED

REJECTED

REJECTED

REJECTED

REJECTED

REJECTED

REJECTED

*/

 

 

 

選択問題7:

1.有線LANなら実際にケーブルをたどっていって、ケーブルに接続されている物の中に悪意ある第三者の物が混ざっていないか確認する。

2.ルータのアクセスログの中から、普段使われていないようなプロトコル(FTPとか)を使っている端末がないか確認する。

3.自分のIPアドレスのブロードキャストアドレスにpingを送り、戻ってきた中におかしいIPアドレスがないか確認する。

4.IPアドレスホスト部のところだけ変更したもの全てにpingを送り、本来戻ってきてはならないところから戻ってきていないか確認する

5.Netenumなどのツールを使って、全てのIPアドレスを調べてみる。

 

 

選択問題9:

サービス:インターネットと役所の窓口の両方から交付申請ができるようなサービスをつくる。

インターネットでの申込にはWEBサイトを使い、TLS/SSLを使って暗号化する。

ただし、インターネットでの申込であっても一度は役所の窓口に来てもらうようにする。

最終的には、地方の役所でマイナンバーカードを交付したマイナンバーの表を作り、それを国などが管理するデータベースに保存していく。

注意点:

1.WEBサイトには脆弱性を残さないようにする。

デバッグ用のデータをできるだけ残さないように注意し、ファジングツールなどを使って安全性を確認する。

予算があるならばCloudFlareなどの外部のセキュリティサービスを使うことも検討する。

2.1つのマイナンバーに2つ以上のマイナンバーカードを発行しないようにする。

カードの作成時にもうすでにマイナンバーカードが発行されているならエラーを出力するようにする。

当然ながら、人間の目でも定期的にチェックする。

3.マイナンバーカードはそのマイナンバーの持ち主が来た時に発行する。

その場で発行すると、紛失したり、マイナンバーカードを取り間違えるなどといったリスクが軽減できる。

さらに、二重申込なども未然に防げる。

4.マイナンバーカードを持つことに対しての注意点などを話しておく

紛失した時にどこに申請するか、何をしてはいけないかなどを伝えておく。

特に、パソコンを利用する人に対しては、ウイルス対策ソフトの導入をしてもらうようにする。

できればパンフレットを配布しておくのが理想。

5.マイナンバー情報はできるだけ暗号化した状態で使用する。

どうしてもハッキングというのは起こりうるので、もしハッキングされたとしても被害が最小限に抑えれるようにしておく。

人間はデータを暗号化し忘れることがあるから、ソフト側で暗号化しておく。

6.データベースにはアクセス制限をかけておく。

当たり前だけれども、パスワードには大文字や小文字、数字を必ず含めて十分複雑で長いパスワードを設定しておく。

データベース側ではログを取得しておき、不必要な操作を行ったユーザーに対して警告をしていく。

7.データの入れ間違えが起こりにくいようにする。

マイナンバーを2桁入れ間違えたとか、そういうミスを防げるように二重確認を義務付けておく。

 

 

応募内容は以上です。

来年以降は大学受験に向けてもきっと動き出すので、できれば今年参加したいところ。22歳まで参加の権利はあっても、チューターでの応募や参加はどんどん難しくなっていきそうな気がするから、できればまだ時間のある今のうちに参加が決まるといいんだけど、こればかりは運に任せるしかないっていう。

というか、そもそも全国大会に行ける日が来るんだろうかっていうね。

結果が出るまでもやもやするよーー!

 

kotamanegi.hatenablog.com

 

 

セキュリティ・キャンプ2016に応募してみた!(前編)

最近睡眠不足が続いていました。原因はコレです。

セキュリティ・キャンプに参加したい!

 

そう、セキュリティ・キャンプ全国大会2016です。どうも学校から帰宅できそうにないので、実質29日の日曜日が締め切りでした。1度応募して、やりきったぜー!と脱力しながらマウスカチカチさせていたら公式ページに重要なお知らせとあり、選択問題4を選んでいたのであわてて修正して2度目の送信を行いました。ああびっくりした。

 

 

これからその送信した内容を晒したいと思います。本当は晒す予定はなかったんだけど、今年のセキュキャンの応募内容を晒していらっしゃる方のブログを拝見させていただいていたんですが、なるほど勉強になるなぁと。すごく刺激を受けました。

 

みなさんと比較した場合、僕は数か月前までは中学生だったので、やっぱり全体的に幼いかなと思う面が多々見えてきました。あとアピール不足かなという面も。改善すべき点が今になって見えてきたっていう。

でも29日の僕には、この応募した文章でいっぱいいっぱいでした。

 

結果がまだ出ていないのでめっちゃ恥ずかしいけど、晒したほうが今後のためになると思ったんです。こんな事を書いて応募してた子がいたって知ってもらえたら嬉しいし。

ではいきますよ!

 

 

共通問題[1-1]

MONACOINのFAUCETサービス

今までずっと受け身で過ごしてきたので作り出すことがなかったのですが、今回セキュリティキャンプでの共通問題ということで自分なりに色々調べて作ってみました。
セキュリティキャラバンに2回ほど参加して、セキュリティキャンプに行きたいと思っていたので、この共通問題を見たときは正直頭の中が真っ白になりました。クリエイトするのは非常に苦手なのでPHPの書き方もよくわからず、今年これで応募できるんだろうかと不安になるほどすごく高い壁でしたが、何とか見れるカタチまできたと思います。
このサービスについてですが、ビットコインが仮想通貨の中では有名ですが、モナコインのサービスは最近あまりないので、ビットコインだけでなくモナコインがもっとメジャーになれば生活の中でも様々な選択肢が増えて幅がひろがるかなと思って作ってみました。

 

 

共通問題[1-2]

MONACOINのFAUCET: PHP + BootStrap (+HTML)

とりあえずアイデアを紙にまとめた後、それに従ってサイト構築を進めていきました。正直いって壁にぶつかることも多かったのですが、それでも色々やってきた結果うまくサイトができました。

 

 

共通問題[1-3]

作成したFAUCETサイトのURL:http://blue.esy.es
コンテスト出品:なし

 

 

共通問題[2-1]

1.PHPをパソコンに導入する方法
2.PHPMysql(データベース)に接続する方法
3.PHPMysqlバインド機構を使う方法
4.レイアウトを整える方法

 

 

共通問題[2-2]

1.実際に様々なソフトウェアを入れてみる。
2.古い情報だけでなく、新しい情報を手に入れる。
3.エラー情報を出力するように設定して、どのようなエラーが出ているか確認する。
4.htmlとbootstrapのレイアウトについて書いてあるサイトを片っ端から読んでいく。

 

 

共通問題[2-3]

1.今のパソコンはもし壊れたとしてもすぐに復元できるので、ソフトウェアを入れるのを恐れずにやっていって欲しいということ
2.日本語のサイトはどうしても古い情報が多いので、英語の公式サイトやフォーラムを翻訳ソフトを使ってでもいいから見ていくと勉強になるということ。
3.インターネットで情報を見て回ることも大切だけれど、落ち着いてエラー情報を見てみると案外すっきりと原因が見えてくることもあるということ。
4.とにかくやってみる事が大切だということ。

 

共通問題[3-1]

TLS徹底演習
 学びたい事 -> 実際にTLSがどのようにして作られているのかを学びたい。
 学びたい理由 -> 暗号というのは実用的な上に、数学的にも面白くて、もっとTLSについて詳しく知っておきたいから。

・Webアプリケーションの脆弱性の評価と発見
  学びたい事 -> Web上の脆弱性を実際に見つける方法を学びたい。
 学びたい理由 -> 脆弱性とはこういうものだ、というのは頭ではわかっているのだけれども実際に見つけることができないので、どんなテクニックを使っているのか知りたいから。

クラウドセキュリティ基礎
 学びたい事 -> 自宅でのサーバー構築と比較したクラウドでのサービス提供の注意点。
 学びたい理由 -> クラウドというのは今後重要になってくるとは思っていても、いまいちどんなものか理解しきれていなくて、クラウドでサービスを作成する際にどのような事に気を付ければいいのかがわからないから。

・インフラセキュリティ・ブートキャンプ
 学びたい事 -> セキュアで高速なWebサービスインフラ構築のやり方を学びたい
 学びたい理由 -> セキュリティを保ったままサービスを高速化するための手法を学びたいから。

 

共通問題[3-2]

とにかく、今後ますます重要になってくるクラウドでのセキュリティについて学びたい。
クラウドというのは、ほかの人にサーバー構築や運用をまかせる、というものなので、自分でサーバーを運用していくのに比べて注意が必要、というのは知っているのだけれども、具体的にどこをどうすればいいというのがわからないので、そのあたりをぜひ身につけたい。

また、Webサービス関係についてのセキュリティについても学びたい。
やはりWebサービスは時代が変わっても使われ続けてきたし、おそらく今後も使われ続けると思うので、10年経ってもセキュアなWebサービスを構築するテクニックを学んでいって、時代に対応できる技術を使っていきたい。

 

 

 

後編の選択問題に続きます。

kotamanegi.hatenablog.com

 

kotamanegiという人について

まず最初にkotamanegiの紹介を。

 

現在高校1年生です。見た目は線が細く、華奢な女の子です。色が白いので肌が焼けると真っ赤になるので、常に日焼け止めはかかせません。

 

 

と言いたいんですが、残念ながら汗臭い天然パーマがもじゃもじゃしてるムサクルシイ男子高校生です。前まではヘアアイロンで何とかなってた髪も、最近は湿度が少しでも高いともじゃもじゃし始めます。髪の毛の形状記憶すごい。

年々ヒゲも濃くなってきてるし、小さい頃は髪も少し伸ばしてたから中性的だったのに、最近は徐々におっさん化してきている気がして憂鬱です。でも受け入れなきゃいけないよね、うん。

 

 

 

ええと、最初はやっぱりお見合いっぽい感じで趣味等を書くべきなんでしょうか。

最近の趣味はプログラミングです。情報処理関連の技術も調べる事が大好きです。あと、家があまり裕福でないので小学生の時にゲームを買ってと言いにくく、幸いパソコンはあったので安くゲームを購入する方法を調べていたら海外のゲーム紹介にたどり着いて、遊ぶためにはまず英語を習得しなくてはいけないという大きな壁にぶち当たり、中学に入って英語の授業が本格的に始まったのでがむしゃらに勉強したおかげか、高校1年のわりには英語が使えると思います。(あれ、この紹介文なんだか心がツライぞ)中学から始めたわりに、英検準1級まで取れたら立派じゃないでしょうか。パチパチパチ。

あと、中学に入ったころに将来何になりたいか母親に聞かれたので『何かで起業したい』と答えたら、その足で書店に連れていかれ、日商簿記3級の参考書を渡されて「あたしー、簿記わかんないんだけど、起業するなら簿記とかしてたらなんか役に立ちそうじゃないー?」と、半ば強引に参考書を買った(買わされた)ので、よくわからないけど起業に必要ならやってみるかとやってみたら2級までは案外トントンと受かってしまい。中学1年で日商簿記2級とか、ちょっと周りにいなかったので『もしかして天才じゃね!?税理士?すげぇ!』と勘違いしてしまい、1級を受けましたが連敗中です。最近では返り討ちにあいすぎて戦意を失ったので、コレを職にできる気がしないので趣味で落ち着きそうです。

 

 

 

そして、今後の未来にも影響してくると思うんだけど、大きな分岐になったのが小学6年のときにお正月に久々に会った伯母さんから言われたこのセリフなんですね。

「大人になったら資格もってたら就職するとき評価してもらえるかもよー。パソコン好きなら将来ITパスポートとれば?」

母の実家に親戚が集まったとき、集まったもののコレといって何もする事がなく、祖父母の家にあるボケ防止()のパソコンのタイピングソフトで母と伯母、そして僕で速度を競い合っていました。そのときに伯母から言われたんですね。

もちろん母親はナニソレフーンで終わったんですが、ITパスポートをとれば何かすごそう!と子供心に思いました。

家に帰って、それがどんなものなのか調べて参考書を買ってもらいました。参考書の中は「大人の世界」が書かれてあって、『大人スゲー!こんな事知ってるんだ!社会人スゲー!』と、読んでいました。

でも何回か読んでいるうちに何だか合格できそうな気がして、試験を受けたいと両親に相談したところ、案外あっさりとOKが出て、自宅から車で30分ほどのとこにあるITパスポート試験を実施しているパソコン教室があったので、そちらで受けました。

即時試験結果が出たのですごく嬉しかった。うちで受けた受験者さんの中でこんな小さい子が受かったの初めてですーって教室の方に言われて、誇らしく感じていました。

それが中学1年の4月。ITパスポートを受けて合格したことによって、自分に初めて自信がもてたんです。それまで才能らしい才能を感じなかったし、足手まとい感がすごくて、重いものに埋もれていくのに身を任せていました。

秋に基本情報技術者試験を受けてギリギリで合格、中学2年のときに応用は飛ばして情報セキュリティスペシャリスト試験を受けて、1回目は「クソガキ、高度試験ばかにすんなw出直してこいやwww」という洗礼を受けて落ちましたが、2回目に合格できました。

もうここまでくるとさすがに将来はIT業界で生きていくんだろうなというものがあったので、プログラムはある程度書けなきゃさすがにイカンだろーっというのもあり、高校受験の息抜きのつもりでプログラミングをしていたら、競技プログラミングに出会ってしまって。

今は競技プログラミングの勉強がメインになりつつあります。(学校の勉強が本業ですよ)

 

 

まだまだ僕はすべての事において未熟。さすがに図体だけは大人っぽくなってきているけど。

こうやってブログを書いていく中で成長を感じられるよう、肉体だけでなく精神的にも精進していきたいです。皆さん、どうぞ生温かく見守ってください。