バグハンティングコンテスト参加者のためのtips

russianblue25.hatenablog.com 2年前に書いた記事はこちら。

さて、今年もセキュリティバグハンティングコンテストが終わりました。

第5回とは時が経つのも早いですね。

回を重ねるにつれてリピーターさんが増えてきて嬉しい反面、初参加者がどうしていいのかわからないのではないかとちょっと心配になったりします。

セキュリティ バグハンティングコンテスト2019

約半年前に上記の記事を書いたわけですが、最近見直してみるとあまりにも適当すぎて全く参考にできないと思ったので改めて色々書きたいと思います。*1

参考になる本

この2冊のうちどちらかを読んでおけばいいと思います。

www.amazon.co.jp

徳丸本と呼ばれる有名なWebセキュリティの技術書です。

www.amazon.co.jp

診断用のチートシートと作業用ワークシート(Excel)がついてきます。個人的にはツールの使い方が丁寧に説明してあるのと、ページ数が徳丸本より少なくて読みやすいので初めての方にはこちらをオススメします。

基本的にはこのどちらかの本を読んでおけば、必要な知識は身につくと思っています。

使用するツール

まずは調査に必要なツールをインストールしてみましょう。

いろいろなツールがありますが、個人的にはZAPとBurp Suiteをお勧めしています。

https://portswigger.net/burp

Burp Suiteのコミュニティバージョン(無料版)

https://www.zaproxy.org/

OWASP ZAP

Burpはプロキシ(リクエストやレスポンスを中継する)としてとても優秀です。パラメータを改竄したりするのに使えます。有償版だと自動診断も可能ですが、ちょっとお高いです。コンテストには有償版はいらないかなと思います。

ZAPは自動診断が可能な無料のツールです。こっちで自動診断をするのをお勧めします。

ツールの使い方などはネットに色々情報が転がっているので調べてみてください。

進め方

まずは手動でリクエスト一覧を作成してみましょう。 googleスプレッドシートなどにリクエスト一覧を作成して管理するのが楽かなと思います。

ちなみに上で紹介した上野宣さんの本だと、excelの診断用シートが付いてきたりします。

それができたら、burpを使って講習会で学んだようにパラメータの値をいい感じに変えてみたりしてみましょう。 手動でやりつつ自動診断もかけてみるのがいいと思います。*2

せっかくなので受賞したい

この章は、やるからには受賞したいという人たち向けの記事になります。

いろいろありますが、受賞に必要なものはただ一つです。

レポートを出しましょう。

公式サイトを見ればわかりますが、レポート提出までできたチームはさほど多くありません。

レポートを出してしまえばそれだけで受賞に近づきます。

ただし出せばいいというものではなく、レポートとして質の良いものを出しましょう。

重大な脆弱性を発見するのも評価の対象ではありますが、時間と根気と運も必要になってくるので、質の良いレポートを作成するのが一番近道なのではと思います。*3

質のいいレポートを書く方法

先に書けるところを書いておく

診断対象のサイト名や診断に用いたブラウザの情報などは先に書いておくと楽になります。 また、クロスサイトスクリプティングSQLインジェクションなどの説明も最初に書いておくと全てのサイトのレポートに使いまわせます。 テンプレ化してじゃんじゃん使いまわしましょう。

読み手が再現可能なように手順をしっかり書く

レポートを読む側がレポートの内容だけで再現できるかどうかが大事です。 どうやってリクエストを改竄するのか、どうなったから脆弱性と言えるのかなどをきちんと書いておきましょう。

根拠を明確にする
  • なぜこの脆弱性が危険なのか
  • なぜこの脆弱性を優先的に修正する必要があるのか

など、なぜそう思ったかをしっかり書いておくと説得力が増します。

誤字脱字に注意

当たり前ですが、細かいところまで気を配りましょう。

この辺りを守っていればいいレポートになるのではないかなと思います。

おまけ:脆弱性の傾向

クロスサイトスクリプティングSQLインジェクションといった派手な脆弱性に目がいきがちですが、意外と多いのは

  • 値を変えると不正なリクエストが通ってしまう
  • 権限外の動作が可能

このあたりです。これらはツールを使った自動診断では出てこないので、地道に手動で調べる必要があります。

まとめ

とにかくレポートを書きましょう。

*1:昨年から運営側にいたりするのですが、この文章はあくまで過去の一参加者の書いたものです。運営を代表したりするものではないのでご承知おきください。

*2:ちなみに実際の業務では検証環境にやることが多いと思うので、本番環境に対して診断できる機会はかなりレアです

*3:毎年重大な脆弱性がバンバン見つかってたらそれはそれで...

metasploitで特定のディレクトリのファイル群を読み込んで処理する

2020/10/20 複数ファイルを読み込むのがタイトルからわかりづらかったのでタイトルを修正しました。

注意:研究目的でこれらのスクリプトを用いています。

metasploitで特定のファイルを加工する処理を繰り返したので備忘録として残します。

metasploitは、

msfconsole -r hogehoge.rc

スクリプトを一括で読み込んで実行することができます。 (拡張子はrcで固定です)

このrcファイルの中ではrubyを利用することができます。 これを使って、特定のディレクトリ内のファイルを読み込んで、処理をした後同名のファイルを書き出すという処理を実現します。

<ruby>
lists = Dir.glob("/home/kali/workspace/hogehoge/*")
lists.each do |list|
  bn = %x[ basename #{list} ]
  run_single("metasploitでやりたい処理")
  run_single("set INFILENAME #{list}")
  run_single("set FILENAME #{bn}")
  run_single("metasploitでやりたい処理")
  run_single("exploit")
end
</ruby>

多分もっとうまいやり方があるとは思うのですが、参考になれば幸いです。

gnuplotの背景に色を付ける

久しぶりにやったら忘れてて手間取ったので自分用メモです。 グラフの背景に色をつけたい時用です。

set object {図形の通し番号} rect from {図形の左下x座標}, {図形の左下y座標} to {図形の右上x座標}, {図形の右上y座標} back fillcolor rgb "{好きな色}" fill solid {透明度} noborder

で指定可能です。 例えば

set object 1 rect from 0, -1 to 0.5, 1 back fillcolor rgb "pink" fill solid 0.5 noborder

とすると以下の図のようになります。

f:id:RussianBlue25:20200920101835p:plain
背景に色をつけた例

tldrはいいぞ

この記事はSecHack365 修了生 Advent Calender 2019の1日目です。12/1に投稿できなくてすみません!

はじめに

皆さんはコマンドのオプションや使い方が思い出せないときはどうしてますか?

  • インターネットで調べる
  • manを使う
  • そのコマンドのhelpオプションを使う

これらをざっと思いつくかと思います。

ネットで調べるのはちょっとめんどくさいですよね。できればターミナル上で解決したいものです。

ターミナル上で解決するとなるとmanとコマンドのhelpオプションが挙げられますが、オプションの説明だけで実際の使われ方が書いてなかったりするので、痒いところに手が届きません。

そんなあなたにtldr

tldrというコマンドがあります。

tldr.sh

tldrはコマンドをどのように使ったらいいかをわかりやすく示してくれます。

f:id:RussianBlue25:20191203100245p:plain
tldrの使用例(man)

manやhelpオプションに比べて表示がスッキリしています。やりたいことの逆引き辞典としても使えますね。

インストール

Ruby, Python, goなど様々な言語のライブラリとして提供されています。詳しくは公式ドキュメントを参考にしてください。

MacだとHomebrewで入れられるのでbrew install tldrが楽です。

tldrのtips

tldrをtldrすることもできます。

f:id:RussianBlue25:20191203100516p:plain
tldrをtldr

-pでOSを指定することで、そのOSでのコマンドの説明を見ることができます。例えばbrewの説明は、MacLinuxでは細かな違いがあったりします。

画像の最後に書かれている通り、tldrはgitのサブコマンドもサポートしています。 私は細かな使い方を忘れることが多いので非常に重宝しています。

f:id:RussianBlue25:20191203225043p:plain
tldr git commit

俺の使ってるコマンドがないぞ

大抵のコマンドはtldrに入ってますが、残念ながらないものもあります。*1 また、コマンドによっては全てのオプションやサブコマンドが網羅されていなかったりします。*2

そんなときはtldrのコントリビュータになりましょう!

github.com

余力があればrails、docker周りをまとめてプルリク投げたいなあと思っております。

*1:記事投稿時点で思いつく限りはyacc、rakeは入っていませんでした

*2:dockerは再編成されたあとのコマンドは載ってないですね

AWS LightsailでT-Potを運用してみる

はじめに

大学の研究でマルウェアの分類にまつわる研究をしている。というわけでマルウェアをバンバン捕獲したいなーと思ってハニーポットを立てました

 

なぜLightsail?

自宅サーバや大学のサーバだと面倒

自宅サーバにする手もありましたが、ネットワーク周りの設定とかミスると甚大な被害を被るので。大学のサーバだと、ネットワーク周りの制限がかなり厳しいため試しに作成するには向かないと思い断念。*1

EC2に比べて安い

最近値下げが行われてEC2で構築するより安かったことと、設定が簡単だったことから選択しました。EC2だとセキュリティグループとかVPCとかいろいろ大変なので。*2

構築手順

AWS コンソール

リージョンはバージニア*3

インスタンスイメージはUbuntu 18.04

インスタンスプランはメモリ8GB ストレージ160GBを選択

ssh公開鍵は事前に作成していたものをアップロード

Ubuntu基礎設定

ユーザを追加し、sudo権限を追加します

初期ユーザのubuntuは安全のため、ロックをかけておきます

sudo passwd -l ubuntu

以下はこの追加したユーザで作業します

インストール

git clone https://github.com/dtag-dev-sec/tpotce
cd tpotce/iso/installer/
./install.sh --type=user

こいつを叩きます。途中でyes/noと聞かれるのでyesと答えるとグラフィカルな画面になります。

インストール構成を聞かれるのでSTANDARDを選択肢、ユーザ名とパスワードは先ほど作ったユーザにします。

kibanaを開く

https://[address]:64297

にアクセスします

最初はダメだったんですが64297のポートを開け忘れていたのが恐らく原因でした。Lightsailのポートを開け忘れるとsshも通らないので、まずは64295(ssh)と64297は開けておきましょう。

f:id:RussianBlue25:20181214174327p:plain

kibanaのtpot

 

 初期だとこんなに攻撃は来てないはずですが、kibanaの画面が開けたら成功です。

 

ポートを開けよう

Lightsailの初期設定だと、ポートが全く開いていないのでハニーポットの意味がありません。*4

ハニーポットの待ち受けているポートを開けてあげます。

ちなみに下の画像はかなり不十分です。T-Potにあるハニポの中には全てのポートを解放しなくてはならないものもあったりするのですが、ちょっと怖くて開けてなかったりするからです。後はT-Potの最新バージョンで追加されたハニポのポートを調べきれてなかったりするので。ポートを弄ることがあれば差し替えたいと思います。

f:id:RussianBlue25:20181214174607p:plain

port

さいごに

T-Potの中に入っているMailoneyを動かすためにMyDNSでドメインを取得したりしているのですが、長くなるのでそれは別記事で。

ハニポはやっぱり楽しいですね。みなさんもよきハニーポッターライフを。

*1:研究でも使うかもしれないので、相談したらいけなくはないとは思うのですが。恐らく色々申請を出さなくてはならないので、今回は時間がないこともあり...

*2:ただし細かな設定には不向きで、例えばアクセス元IPを指定するなどはサーバ側でやってあげなくてはならないです

*3:EC2だと東京リージョンより安いのでLightsailでもそうだろうと。詳しくは未確認

*4:一応初期で開いている22番ポートとかあるので、cowrieとかには来ますが...

バグハンティングコンテストに出た話

SecHackの話を全く書いてないまま半年が経とうとしています。やっぱり放置してしまいました。来年からはちゃんと書きます。

 

さて、弊学では2016年からこのようなコンテストが開催されています。

https://c-csirt.chiba-u.jp/bughunt2018/

www.chiba-u.ac.jp

私は第二回と第三回(2017,2018)に参加したので、軽くまとめていきたいと思います。

What's this?

学内のサイトの脆弱性診断を行い、レポートにまとめて提出するというコンテストです。学術機関らしく、診断を行うためには所定の講習を受講してハンターライセンス*1なるものを取得しなくてはなりません。これがコンテストの参加条件になっています。

コンテスト上ではstage1とstage2というステージに分かれており、stage1が事前に用意されたやられサイト(バグがてんこ盛りの参加者のみ接続できるサイト)でstage2が実際に運用されているサイトです。*2

コンテストは毎年8-9月の約一ヶ月間開催され、レポートの出来や発見した脆弱性などを総合的に評価して優秀な参加者には表彰があります。

また、第二回からは副賞の一つとして受賞者を対象としたインターンシップが開催されています。

blog.securesky-tech.com

blog.securesky-tech.com

(実際はSSTさん以外のインターンシップ先もありました。全部で5つくらいだったか)

2017年

初出場。

提出したレポートは計4本。やられサイトと学内で実際に運用されているサイト*3本です。

やられサイトの方は大体のバグは見つけたのですが、実際に運用されているサイトの大きなバグは見つけることができなかったので悔しかったです。

ちなみにこの時最優秀賞をとったのは学内限定のコンテストとはいえSecHack365の応募やインターン応募の際のアピールポイントになりました。

2018年

二回目の挑戦。

この年は(も)仕事が忙しく、レポートは各1本ずつしか出せず。

やられサイトの方は最後一日で大方の検査とレポート作成を行うという感じでほとんどさわれなかったのが残念でした。

結果は二年連続で最優秀賞をいただけることになりましたが、それに見合う成果を出せたのかという思いはちょっとあったりします。

 

ちなみに今年度からは、前年度までの初心者向け講習が「情報セキュリティ入門」という形で授業化されました。これは受講していなくてもコンテストの参加はできます*3

 

参加して

機械学習系の研究室に行くか暗号系の研究室に行くか...?とフラフラしてたのが、このコンテストがきっかけで行きたい研究室をちゃんと決めました。ちゃんと配属されて今のところは楽しくやっています。*4

また、長期のインターンを本格的に始めたりSecHack365やコミュニティ活動をやってみるいいきっかけにもなりました。ありがとうございました。

 

おまけ。

折角なので使ったツールを挙げていきたいと思います。

使ったツール

OWASP ZAP

OWASP Zed Attack Proxy Project - OWASP

有名な自動診断のツールです。最新ver.は記事公開時点で2.7.0です。

第二回のときは2.6系だったので公式が提供している拡張機能を色々組み込んで使っていたのですが、2.7系からは本体に統合されたっぽいですね(未確認。不正確な情報を含んでいる可能性があります。)

私はZAPをproxyとして使用し、firefox上でブラウジングしてある程度動作を記録した後検査対象サイトをコンテキストに含めてプロテクトモードで自動診断をかけていました。

 

Burp Suite

Burp Suite Scanner | PortSwigger

有償版と無償版がありますが、有償版は上のZAPがあるのでいいかなーと。

手動診断で使用していました。

 

他にもnmapやsqlmapを使ったりはしましたが、基本的に上二つで大丈夫かなと思います。 

最後に

レポートの書き方のこつみたいなのを載せようかと思いましたが長くなりそうなのでまたどこかで(書くとはいってない)

来年以降出る方は頑張ってください。応援しています。

バグハンティングはいいぞ

*1:ハンター試験に合格する必要はないし数百万分の一の難関でもない

*2:実際にはコンテストの対象サイトとして30ほどのサイトが挙げられており、また検査禁止期間が定められているサイトもありました

*3:私は受けてませんがスライドは見せてもらいました。基本的な内容が網羅されていていいと思いましたが、あれで諦めちゃった人も多いかなあ......と

*4:地獄をまだ見てないだけという可能性はある

SecHack365に受かった

sechack365.nict.go.jpSecHack365に二期生として採択され、先日神奈川に行ってきました。SecHackの詳しい説明は↑の公式をご覧いただければ。

 

...まあ先日と言っても一ヶ月以上前なんですけどね!
後数日で北海道に行くというのに、未だに神奈川回の話を書いてないです。すみませんサボってました。

SecHack365のプログラムの中で「習慣化」というトピックで講義があり、各個人で習慣化させたいことについて目標を立てました。
私が立てた目標の中に「アウトプット」なるものがあり、具体的にはブログを作ったりLTやったりですね。

その一環で今回ブログを始めました。続かないのは目に見えてますがぼちぼち頑張ります。

 

 

ちなみに目標の中に

「健康に気をつける」

という項目を立て、さらにその子項目に

「ラーメンは週に2回まで」

という目標を立てました。(目標が低いとか言ってはいけません)

 

今日は家系ラーメンを食べてしまったので、日曜日まで一杯しか食べることができません。その貴重な一杯は北海道に捧げてこようと思います。