おちこんだりもしたけど、私は元気です。
DESCRIPTION
おちこんだりもしたけど、私は元気です。TRANSCRIPT
I was kind of blue for a while, but I'm fine.
おちこんだりもしたけど、
私は元気です。
自己紹介
Twitter: abend@number3to4
セキュリティエンジニア。アルコールが好きな元ダメ人間(時間さえあればどこでも飲んでしまうスタイルは、今は個性だととらえるようになったので卒ダメ人間)
概要
脆弱性を探すとあるバウンティハントに参加した時の感想をまとめてみました。
<概要>2日間にわたり、主催が用意したテスト用サイトにみんなでいろいろやってみて脆弱性を報告する。順位は、検出された CVSS値で評価される。また、その数値に応じて、賞金がでちゃうというもの。
夕飯・風呂 ハントハント
1日目
ハント ハント
2日目 飲酒
飲酒飲酒
朝食
昼食
ギャップ
セキュアなサイトだったので、幾度となく心が折れました。
理想と現実のギャップをまた知る。
ソーシャルエンジニアリング
validationがしっかりしてそうだったので、 XSSや SQLインジェクションなどのパラメータまわりの脆弱性(ツールなどで診断可能な項目)はやめて、ツールでは診断が困難な項目に特化して診断を実施しました。
理由として、ツールで検出可能な脆弱性はすでに検出されている可能性が高いため、ツールで検出困難な項目であれば、見つかりやすいと思ったからです。
「社会人」なので、そういったソーシャルエンジニアリングも活用します。
また、いろいろな方から昼食時に状況をヒアリングし、自分の方向性を確認。
ツールで診断が困難な項目って
ツールの種類によっても、検出可能な脆弱性は変わってくると思いますがアクセス制御不備については、どのツールも検出は困難な脆弱性の一つです。
では、アクセス制御不備って?
アクセス制御不備 1
リクエスト操作により、権限のない情報へのアクセスや操作ができてしまう脆弱性
Application Server
・ なりすましによるサービスの不正利用や情報漏えい
利用者 IDを改変してアクセス
他ユーザでログイン
被害
攻撃者
※ 一般的な脆弱性の説明です。
アクセス制御不備 2
原因: 処理や表示時に、権限の確認がされていない。
利用者メニュー
個人設定確認
利用者メニュー
個人設定確認
https://example.com/profile.cgi?userid=345
https://example.com/profile.cgi?userid=346
対策: 権限情報をセッション変数に保持し、処理や表示前に権限を確認。
Aさんの個人設定
アドレス:○○氏名:××××
Aさんの個人設定
アドレス:○○氏名:××××
Bさんの個人設定
アドレス:△△氏名:□□□□
Bさんの個人設定
アドレス:△△氏名:□□□□
id= 345
id= 346
攻撃手法①
利用者メニュー
管理者用
利用者メニュー
管理者用
https://example.com/admin
管理者機能
システム変更
管理者機能
システム変更
攻撃手法②
※ 管理者用 URL が表示されていなくても、 URL さえわかればアクセスできてしまう。
※ 識別子の値を変更すると
他人の情報が見えてしまう。
※ 一般的な脆弱性の説明です。
どうする?
アクセス制御不備の項目を診断するには、アプリケーションの仕様を理解しないと、なにがダメか指摘できないので、仕様理解を実施。
① ユーザ Aでしかアクセスできない状態を作り出す。
② ユーザ Bでアクセスしてみる。
<観点>・複数権限(ゲスト、一般利用者、管理者など)が定義されているか。・不特定多数のユーザが利用できるのか。・グループ内で利用できるのか。・特定のユーザしか利用できないのか。
ワークフローシステムの場合、だれがどの情報を見れていいの?掲示板の場合は?この掲示板は公開されているものなの?
業務アプリの場合、仕様理解することが非常に難しいケースもあり社会人力が問われる。
幻覚
そんな、つらいことも
仕様理解ができていないと、「おっ!!これ行ったんじゃね!!」って調子のっていると
とある細胞より早く発見!!
そんなこんなで、いろいろと試行錯誤し、何らかの脆弱性発見。幻覚ではないことを何度も確認した。
実験ノートはつけていないし、 200回以上確認はしていないが、 HTTPログを複数回確認し、「脆弱性はあります」。
成果発表
2日間にわたる激闘の結果、自分がどんなことをやったのかを一人 4分程度で発表。自分の前に 7人くらい発表していたが、みんなテクニカルなことを発表していたので、自分もと意気込み・・・
<発表した概要>
・脆弱性が全然見つからないから、スタイルシート変えて遊んでました。
オレ、技術者じゃないかもしれないと気づく。ただ、ツラい。
結果発表
一応、何件か報告したが、脆弱性として認定されたかは分からないまま結果発表へ
なぜか、 2位になり
2位になれた理由は、発見した脆弱性を横展開し、他の箇所でも同様の脆弱性を発見し、件数を稼いだ結果だと思う。
これを「社会人力」というらしい。
さいごに
昨年の賞金は、すべて飲み代に消えた。今年もその予定。
No Drink No Hack!!