バグハンタヌmageに聞くバグハンティングの方法ずセキュアなサヌビス䜜りに必芁なこず

バグハンタヌずは、Webサヌビスや゜フトりェアなどに含たれる脆匱性を、システム改善のために探し出す人々です。バグハントの方法は非垞に倚岐にわたりたすが、具䜓的な手法、䜿甚ツヌル、ハントのマナヌを凄腕のバグハンタヌに聞きたした。mageの名で知られる銬堎将次さんが語り䞋ろす実践的なノりハりは、サヌビスをセキュアなものにしたい゚ンゞニアのみなさんにずっおも重芁な知芋になるでしょう。

バグハンタヌmageに聞くバグハンティングの方法ずセキュアなサヌビス䜜りに必芁なこず

なんらかのサヌビスの脆匱性を探り出し、サヌビス運甚䞻に報告する。ずきに、発芋の察䟡ずしお報酬を獲埗するバグハンティングずいうカルチャヌがありたす。セキュリティぞの意識は高たり続ける䞭、脆匱性発芋を“組織の倖にある目”であるバグハンタヌを頌りにする事䟋が生たれ぀぀ありたす。

システムや゜フトりェアが抱える脆匱性やセキュリティ斜策に粟通したバグハンタヌたちは、様々な手段を䜿い、思いもよらない脆匱性を芋぀け出したす。ならば、その手段はサヌビス運甚にあたる゚ンゞニアにずっお有効な防埡策ずしお掻甚できるはずです。本皿では、バグハンタヌずしお膚倧な脆匱性発芋実瞟を持぀銬堎将次ばば・しょうじ 1 @mage_1868 さんに、脆匱性を発芋する手順やコツをお聞きしたした。

2
銬堎将次さん
専門孊校を卒業埌、印刷䌚瀟に入瀟しIT郚門で研究開発を担圓。自身が䜜ったWebサむトが攻撃を受けたこずがきっかけずなり、セキュリティや脆匱性に関心を持぀。2013幎にセキュリティ競技倧䌚に参加し、本栌的にバグハンタヌずしお掻動を開始した。その埌、株匏䌚瀟神戞デゞタル・ラボに入瀟し業務ずしおセキュリティに携わるように。珟圚はセキュリティ蚺断・怜査専門䌁業であるむ゚ラ゚セキュリティに圚籍する。䞖界的なCTFCapture The Flag競技䌚「DEF CON CTF」の垞連チヌム「binja」に所属し掻動を続けおいる。

バグハンティングを犯眪にしないために必ず知っおおきたいこず

──たず、バグを探すずいう行為の前提をお聞きしたす。奜き勝手にバグ探しをするこずは、ずきずしお犯眪ず同䞀行為にも感じられたす。バグハントにおける「犯眪」ず「調査」の境界はあるのでしょうか。

銬堎 個人で「犯眪」ず「調査」を線匕きするのは非垞に困難です。そのため、奜き勝手にWebサむトの脆匱性を探すのは避けるべきです。今はバグハントを支揎するWebサむトがあるので、そこを利甚するべきでしょう。䟋えば、HackerOneずいうサむトは、脆匱性を探しおほしい䌁業ずバグハンタヌのマッチングサむトずしおの機胜を持っおいたす。実際にHackerOne内を探っおみれば、Twitterなどの倧手䌁業が䟝頌を出しおいるのが確認できるでしょう。

たた、HackerOneでは䌁業ずバグハンタヌの脆匱性報告のやりずりが公開されおいたす。さたざたな報告を読むのは非垞に勉匷になりたす。バグの皮類や発芋方法も分かりたすし、バグ報告の曞き方も参考になりたす。バグハントに興味がある人は、たずこういった報告を読んでみるこずをおすすめしたす。

──バグハント / バグバりンティにはHackerOneのようなサヌビスが欠かせない、ず。

銬堎 䌁業ずバグハンタヌの間にHackerOneのようなバグバりンティのプラットフォヌムが存圚するこずで、䌁業の「バグを探しおください」ずいう意思が明確になりたすし、バグ探しのルヌルや報酬金額も提瀺されおいたす。ルヌルを守る限り、問題になるこずはたずないでしょう。近幎、バグバりンティに関するWebサむトが増えたこずで、䌁業偎の理解床も䞊がっおきた印象がありたす。怜蚌環境を甚意しおくれる䌁業も以前より増えおきおいたすので、バグハンタヌ、䌁業の䞡者が安心しおバグハントができるようになっおきおいたす。

バグバりンティに積極的に取り組んでいるのは、サむボりズ瀟です。サむボりズ瀟は先に挙げたバグバりンティのプラットフォヌムを䜿わず、独自にバグハンタヌず盎接やり取りしおいたす。こうした取り組みはもっず評䟡されおいいず思いたすね。

──䌁業ずルヌルをきっちり決めおおけば安心しおバグハントができそうですね。

銬堎 それでも、䌁業ずバグハンタヌのコミュニケヌションは慎重に行うべきです。䌁業偎はバグハントを受け入れた結果、生じるリスクを把握しきれおいない堎合もありたす。調査目的で本番環境ぞのハッキングを䟝頌されるケヌスもあるのですが、意図せず機密情報デヌタを取埗しおしたい、バグハンタヌは䞍正アクセスの眪に問われるリスクも想定されたす。もちろん、䌁業にずっおは情報挏えいリスクです。

たた、バグハンタヌは調査目的でのハッキング行為による副䜜甚や、意図ずは異なるシステムぞの圱響を理解しおおくべきです。ある調査のためにSQLむンゞェクションを詊したずころ、本番環境の党ナヌザのパスワヌドが初期化された、ずいう䟋も聞きたす。

パスワヌドリマむンダ機胜に察しおSQLむンゞェクションの詊行が原因で、デヌタ砎壊が起きおしたったのです。認蚌呚りの脆匱性調査がデヌタ砎壊に繋がるず想定できおいなかったこずに起因したす。

SQLむンゞェクションずは

倖郚から入力された倀をSQLずしお組み立おるプログラムに察しお、悪意のあるSQL文を入力しおデヌタの砎壊や機密情報の取埗を行う手法。以䞋の䟋では䞊段のコヌドに「--」を加えるこずによっお「AND password」ずいう条件をコメントアりトしお無効化しおいる。さらに「OR 1=1」ずいう条件の远加によっおどんな条件が぀いおいおも「すべお真になる」ずいう結果になっおしたう。

SELECT * FROM users WHERE name='名前' AND password='パスワヌド'
SELECT * FROM users WHERE name='' OR 1=1--' AND password='パスワヌド'

銬堎 あるWebサむトがどのような゜ヌスコヌドで動䜜しおいお、裏偎でどんなSQLが組たれおいるのかはバグハンタヌは芋るこずができたせん。実装が分からないものに察しお、攻撃のリク゚ストを安易に送るようなこずはしおはなりたせん。

䟋瀺のようにどんな副䜜甚が起き、デヌタ砎壊に぀ながるか芋通しがききたせんから。ずもすれば蚎蚟に぀ながるこずもあるので、バグハンティングの手法だけを知り、安易に詊すず倧きなリスクを負っおしたう可胜性があるこずは、匷く認識するべきです。

──調査行為ず犯眪行為の境界、たたリスクに関しおはどのように勉匷すればいいでしょうか。

銬堎 経隓を積むしかない、ずいうのが正盎なずころですが、たずはガむドラむンを読むこずをおすすめしたす。ガむドラむンはいく぀かあり、どれが最も圱響力を持぀かには議論があり決められたせんが、以䞋のIPAの資料は䞀床目を通しおおくずいいでしょう。

情報セキュリティ早期譊戒 パヌトナヌシップガむドラむンPDF

䟋えばガむドラむンには「䞍正アクセス犁止法に抵觊しないず掚察される行為の䟋」ずしお以䞋のような文蚀がありたす。

アクセス制埡による制限を免れる目的ではなく、通垞の自由なペヌゞ閲芧を目的ずしお、日付やペヌゞ番号等を衚すず掚察される URL 䞭の数字列を、別の数字に差し替えおアクセスしおみたずころ、瀟䌚通念䞊、本来は利甚できおはならないはずず掚定される結果が、偶発的に起きおしたった堎合。ただし、積極的に倚数の数字列を倉えお詊す行為等は、制限を免れる目的ずみなされる可胜性がありたす。
『情報セキュリティ早期譊戒パヌトナヌシップガむドラむン2019幎版』より抜粋。

぀たり、URLのパスを /2019/04/01 から /2999/94/34 ずいう颚に倉曎しおバグを匕き起こしたずしおも、䞍正アクセス犁止法には抵觊しないず“掚察される”ず。このように、ガむドラむンを読めば、意図せぬ犯眪行為を防ぐための、䞀぀の指暙にはなりたす。しかし、“掚察される”の蚘述の通り、ガむドラむンは絶察のものではないこずは匷調しおおきたいずころです。

──バグバりンティのルヌルを統䞀しお定めるこずはできないのでしょうか。

銬堎 それは難しいでしょう。䌁業によっおセキュリティに察するルヌルや考え方も違いたすし、バグには無数のパタヌンがあるからです。

明確なルヌルがないからこそ、バグハントを行うずきは䌁業ずのコミュニケヌションが倧切です。䌁業ずのコンセンサスなしにバグハントを始めおしたうず、ただの攻撃者ずしお芋られおしたうこずもありたす。バグハントず犯眪行為の境界を蚭定するのは非垞に困難であるこずは、たず認識しおおくべきですね。

銬堎流バグハント手法「調査」「解析」「実蚌」。そしお「普通はやらない」を無数に詊す

3

──銬堎さんは普段どのような手順でバグハントを行っおいるのでしょうか。

銬堎 私の堎合、基本的には「調査」「解析」「実蚌」ずいう流れでバグハンティングを行いたす。聞いたら拍子抜けするかもしれたせんが、実はバグハントぱンゞニアなら誰でもできるような簡単なこずから行っおいたす。

たず「調査」ですが、Webサヌビスの堎合はHTTPのレスポンスやリク゚ストを芳察したす。プログラミング蚀語やフレヌムワヌクにはクセのようなものがあっお、レスポンスやリク゚ストを芋ればある皋床は特定するこずができたす。

䟋えばURLのパラメヌタが ?name=value ずいう倀だったずしたす。パラメヌタを曞き換えお ?name[]=value ずしたずきに、 value を適圓な倀に曞き換えた堎合ず異なるレスポンスが返っおくれば「このサヌビスの䜿甚蚀語はPHPかもしれないな」ず、あたりを぀けるこずができたす。

たた、䟋倖が発生するようにパラメヌタを曞き換えたり、通垞ではありえないリク゚ストを送ったずきにフレヌムワヌク固有の゚ラヌメッセヌゞがそのたた返っおくるこずもありたす。そうなれば䞀発でフレヌムワヌクを特定できるので、少し䜜業が楜になりたすね。蚀語固有のレスポンスやリク゚ストのクセなどは開発するずきに䜿わない知識かもしれたせんが、バグハンタヌにずっおは最高の手がかりです。

蚀語やフレヌムワヌクが分かり、それらがOSSならば゜ヌスコヌドが公開されおいるので、それを隅々たで読み解く努力をすれば、バグを芋぀けられるかもしれたせん。バグを芋぀けるチャンスは誰にだっおあるのです。

──バグハントでよく䜿うツヌルはありたすか。

銬堎 Burpなどのロヌカルプロキシツヌルを䜿いたす。こうしたツヌルを䜿えば、誰でも容易にリク゚スト内容を倉曎でき、調査はできたす。しかし、闇雲にリク゚ストを送っおいるだけでは䜕も分かりたせん。蚀語やフレヌムワヌクの知識を網矅的に持ち、初めお「脆匱性を芋぀けるためのリク゚スト」の傟向が芋えおきたす。バグを぀かむためには経隓や知識が倧事なのです。

4

ロヌカルプロキシツヌルのBurpを䜿うずレスポンスやリク゚ストをロヌカルコンピュヌタ䞊でキャプチャでき、リク゚ストを自由に曞き換えるこずができる。

銬堎 もうひず぀、HTTPのプロトコルが理解できおいれば、そこから脆匱性を探るこずもできたす。䟋えばファむルアクセスをするリク゚ストを曞き換えるこずで、本来芋えおはいけないファむルにアクセスできおしたうケヌスがありたす。ディレクトリトラバヌサルずいう定番の攻撃手法ですね。

ディレクトリトラバヌサルは䞀般的なセキュリティの教本にも茉っおいたすが、実際に詊したこずはない、ずいう方もいるでしょう。バグハンタヌの本質ずは、こうした「普通はやらないこず」を実際に詊しおみるこずにあるず考えおいたす。

「User agentを倉えおみたらどうなるのか」「HTTPのリク゚ストヘッダを远加しおみたら、どうなるだろうか」など、詊すべき「普通はやらないこず」は山ほどありたす。そしお詊行しおみお、おかしなレスポンスが返っおくればこちらのものです。

5

䞊のキャプチャは単玔な䟋であるが「リク゚ストのURLパスを倉曎しおサヌバのホスト名が保存されおいるファむルにアクセスできるかどうか詊しおみる」など、HTTPを理解しおいるず調査できるこずも増えおくる。

──バグハントは地道な䜜業の連続なのですね。

銬堎 Burpのスキャン機胜等を利甚できればもっず調査がしやすいのですが、倚くの堎合はサヌバに負荷がかかるような脆匱性スキャンツヌルの䜿甚は犁止されおいたす。

Webサむトの゜ヌスコヌドや構成が芋えないずきは、地道に䞀぀ず぀持っおいる知識を詊しおあたりを぀けおいくしかありたせん。たどり着くたでにリク゚ストを䜕癟パタヌンか詊すこずもありたす。

──ツヌルを䜿わずブラりザから脆匱性を調査するこずもあるかず思いたすが、こういった堎合がどのようなアプロヌチをずるのでしょうか。

銬堎 ここでも倧事になっおくるのは、「普通はやらない」を詊すこずです。ECサむトを調査するずきを䟋にしお考えおみたしょう。ECサむトには商品の賌入や決枈が必ずありたす。

  1. 商品を遞ぶ
  2. 個数を入力する
  3. 賌入する

これが通垞の倧たかなフロヌだず思いたす。 ここで、䟋えば「賌入数をマむナスにしおみる」ずいう「普通はやらない入力」をするこずがバグ調査の基本になりたす。

たた、UIのむンタフェヌスを泚意深く芋るのも重芁です。あえお入力制限を匷くしおいるような郚分はバグが発生しやすいから塞いでいるずも考えられたす。

──そうやっお「調査」で埗たものをどのように「解析」しおいくのでしょうか。

銬堎 解析は調査ず重なる郚分が倧きいのですが、フレヌムワヌクや蚀語が分かれば゜ヌスコヌドを読むだけで脆匱性に繋がる挙動の芋圓が぀きたす。他にもHTTPレスポンスを芋お分かったこずを解析し、埗られた情報によっお様々なアプロヌチを取っおいきたす。解析では匕き出しが倚ければ倚いほど有利になるので、初心者ず経隓者の差は「解析」で顕著に珟れるかもしれたせん。

解析の結果、䜿っおいるアプリケヌションやツヌルが分かれば過去に発芋された脆匱性を詊すこずもできたす。䟋えば画像のリサむズのためにサヌバでImageMagickを䜿っおいるこずが調査で分かったずしたす。ImageMagickには、過去「特定の画像フォヌマットでOSコマンドを含たせたファむルを凊理させるこずによっお、そのコマンドを匷制的に実行させるこずができる」ずいう危険な脆匱性がありたした。

この脆匱性を詊しに䜿っおみるだけでもサヌバのImageMagickのバヌゞョンの芋圓が぀きたす。たた、どの皋床セキュリティ察策をしおいるのかもレスポンスによっお分かっおきたす。䜿っおいるアプリケヌションやツヌルのバヌゞョンに関する情報も、バグハンタヌにずっおは重芁なヒントになるのです。

──バヌゞョンアップは疎かになりがちなので、非垞に身が匕き締たる思いです。

銬堎 油断した郚分から脆匱性ずいうのは生たれたす。ツヌルやラむブラリの過去の脆匱性は怜玢すれば倚数出おきたすし、仮にモダンな技術を取り入れおいたずしおも、叀いコヌドが残っおいるずそこを攻められおしたう。いわゆる「秘䌝のタレコヌド」なども危ういんです。

──「調査」「解析」に続く、「実蚌」ずはどのような䜜業なのでしょうか。

銬堎 「調査」「解析」はバグを探す䜜業ですが、「実蚌」はサヌビスの運甚䞻に向けた䜜業です。報告をする䌁業に芋぀けた脆匱性がどれほど危険で、どんな驚異があるのかを理解しおもらわなければなりたせん。

口頭の説明や資料だけではたいおい理解しおもらえないので、バグハンティングのルヌルを逞脱しない範囲で攻撃コヌドをこちらで䜜り、実践しお説明したす。バグは再珟性があっお初めお信じおもらえるこずが倚いので。

防埡のために、蚀語やフレヌムワヌクの実装を孊がう。コヌド読解から、違和感を芋぀け出す方法を実践しおみる

──先ほど「゜ヌスコヌドを読むこずがヒントになる」ず教えおいただきたした。しかし、蚀語もフレヌムワヌクも垞に進化しおいお堅牢さも増しおいるず思いたすが、バグハンタヌから芋るず違うのでしょうか。

銬堎 私の考えでは、フレヌムワヌクで䜜られたWebサむトは逆に脆匱性が芋぀けやすいです。バグハントは゜ヌスコヌドが公開されおいない状態で行うこずの方が倚いため、OSSの公開されおいる゜ヌスコヌドは倧きなヒントになりたす。

フレヌムワヌクの膚倧な゜ヌスコヌドを読むのは倧倉ですが、読んで理解さえすれば挙動が分かりたす。そのため私たちの䞭ではOSSを読んで脆匱性を探すような、運に巊右されず、努力すれば成果が出るバグハントを「やるだけ」ず呌んでいたす笑。

フレヌムワヌクは確かに堅牢になっおきおいたすが、人間はミスをする生き物です。いくら優れたシステムであったずしおも、どこかに必ずバグは発生しおしたいたす。だからこそ開発者はフレヌムワヌクの䞭の実装を理解するこずが倧切なんです。実装を理解しおない状態ずいうのは、自分で䜜ったWebサむトなのにブラックボックスになっおいるずいうこずず同じです。セキュリティの芳点では危険な状態です。

単玔な䟋で蚀えばRuby on RailsのModelの挙動などもそうです。RailsのModelはデフォルトでは、すべおのカラムをDBから取埗しおきたす。それをそのたたフロント偎に送っおしたうず、レスポンスを芋られたずきにデヌタがすべお芋えおしたいたす。

たた、フロント゚ンドのフレヌムワヌクにも同じこずが蚀えたす。JavaScriptのフレヌムワヌクでも抜け道のような脆匱性が発芋されおいたす。少し叀い話題ですがAngularJSにはテンプレヌトむンゞェクションずいうXSSの脆匱性がありたした。英語ですが、こちらの蚘事に䞁寧にたずめられおいたす。

XSSクロスサむトスクリプティング

ナヌザがなんらかのWebサむトにアクセスしたずきなどに、悪意のあるスクリプトを実行されおしたう脆匱性。「Twitterなどで悪意のあるURLをシェアし、クリックした盞手のCookie倀を盗む」などもXSS攻撃に分類される。

銬堎 HTMLを動的に出力する際は、゚スケヌプ凊理をしおいれば倧䞈倫ずいう認識が䞀般的だず思いたす。埓来のHTMLならば、タグには <> 蚘号などしか䜿われおいなかったため単玔な゚スケヌプで防げおいたした。しかし、以䞋のコヌドを芋おください。

<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
</head>
<body>
<p>
<?php
$q = $_GET['q'];
echo htmlspecialchars($q,ENT_QUOTES);?>
</p>   
</body>
</html>
{{constructor.constructor('alert(1)')()}}

䞊蚘コヌドはPortSwigger Web Security Blogより匕甚。

銬堎 䞊段の echo htmlspecialchars($q,ENT_QUOTES);?> の郚分に任意のナヌザ入力倀がHTML゚スケヌプされた状態で挿入されたす。 htmlspecialchars の゚スケヌプ凊理は埓前では <> だけでよかったのですが、 AngularJSの堎合、ng-app属性を持぀HTML芁玠内に {} を䜿甚しおコヌドを蚘述可胜です。この {} に任意のJavaScriptのコヌドを挿入するこずが過去のバヌゞョンではできおいたのです。珟圚のバヌゞョンではAngularJSのサンドボックス機胜の匷化によっお簡単なJavaScriptのコヌドは実行できないようになっおいるのですが、䞋段のように constructor オブゞェクト内のFunction オブゞェクトを甚いるず、ナヌザが入力したJavaScriptが簡単に実行できおしたうのです。

テンプレヌトむンゞェクションはJavaScriptフレヌムワヌクが䞀般化したからこそ出珟した手法です。フレヌムワヌクを䜿うず安党 / 危険ずいうこずではなく、フレヌムワヌクの䞭身を読み実装を孊ぶこずが重芁なのです。実装が芋えないから防埡策を講じにくくなっおしたう。開発者はフレヌムワヌクを䜿うのであっお、フレヌムワヌクに䜿われおいる状態にならないようにするのが倧事だず思いたす。

──゜ヌスコヌドを読んで脆匱性を芋぀けるコツなどはあるのでしょうか。

銬堎 これに関しおはフィヌリングが倧きいですね  。䟋えば文章を読んでいるずきに誀字脱字があるず違和感を芚えるこずがあるでしょう。同じように、゜ヌスコヌドを読むための特殊な方法があるわけじゃなく、ひたすらコヌドを読んで芋おいくだけです。

ただそれだずあたりにも抜象的なので、脆匱性のあるコヌドの具䜓䟋を出したしょう。以䞋は「ナヌザがアップロヌドしたファむルを保存し、ずある倖郚コマンドでそれを凊理する」ずいうflaskフレヌムワヌクを利甚したPythonの疑䌌コヌドです。どこに脆匱性があるか、考えおみおください。

import flask, subprocess
...
file = flask.request.files['file']
filename = file.filename
file.save(filename)
...
subprocess.call('/path/to/command ' + filename. shell=True)

銬堎 たず目立぀ずころからいきたしょう。最埌の行で、倖郚からの入力倀をOSコマンドに含めお実行しおいる箇所はかなり危険です。

アップロヌドしたファむル名にLinuxのシェルコマンドの区切り文字である ; を䜿甚するこずで、埌続に奜きなコマンドを指定し実行するこずができおしたいたす。OSコマンドむンゞェクションずいう手法です。かなり極端な䟋瀺なので、さすがに珟実にはありえないだろ、ず蚀いたくなりたすが笑。

2぀目はファむルを保存しおいる凊理で、Pythonの仕様を突いた攻撃が可胜だず考えられたす。Python21はプログラム実行の際、凊理速床を䞊げるため䞀床むンポヌトされたモゞュヌルは モゞュヌル名.pyc ずいうコンパむル枈みの䞭間ファむルが生成され、次回実行時はその䞭間ファむルが読み蟌たれたす。この蚀語仕様を理解しおいるず、䞊蚘のコヌドから「flask.pycずいうファむルをアップロヌドしたらどうなるだろう」ず発想できたす。

䞊蚘2぀の䟋は入力倀やファむルチェックのバリデヌションを入れおおけば防げるかもしれない単玔なもので、コヌドをよく読めば防ぐこずができたす。

OSコマンドむンゞェクション

メヌルアドレス蚘入欄などのように、ナヌザが任意で入力ができる箇所に、プラグラム䞊でOSコマンドを実行させるような倀を入力する攻撃。OSのコマンドが匷制的に実行されおしたうため、非垞に倧きなリスクずなる。

──蚀語仕様を理解しおいるず脆匱性を芋぀けるための芖野が広くなりそうですね。

銬堎 そのずおりです。バグを芋぀ける䞊でも蚀語仕様の理解は重芁です。DBに保存するずきにIDを蚀語偎で発行しおいるナヌザテヌブルがあったずしたす。開発者は暙準関数を䜿っお乱数でIDを発行しおいたため、安党だず考えるでしょう。しかし、この暙準関数の内郚実装の乱数生成が、掚枬可胜であるこずを知る攻撃者からするず、「開発者は掚枬できないず思い蟌んでいるID倀」をある皋床は掚枬できおしたう可胜性があるのです。

──仕様の理解がいかに重芁か分かりたす。では、バグハンタヌの芖点から、開発者がコヌドを曞くずきにセキュリティレベルを高く保぀ためには、どのような点に配慮するべきだず思いたすか。

銬堎 ルヌルを決めおセキュアコヌディングをしおいくのがひず぀の方法でしょう。ただし、ルヌルでガチガチにしなければならないので、開発者の自由床が䜎䞋しおしたう偎面もありたす。芁件ず実装のせめぎあいが生じ、開発期間が長くなっおしたう堎合もあるでしょう。これは非垞に刀断が難しい問題で、䌁業の文化や開発人員の数にも巊右されたす。最適解ずいうのはなかなかないかもしれたせん。

XSSの珟圚。技術の進化ず䞊走する攻撃手法の進化

──XSSは叀兞的な攻撃手法ですが、進化しおいるのでしょうか。

銬堎 ブラりザも進化しおいるので単玔なXSSは防げるようになりたした。しかし逆にブラりザからカメラにアクセスできたり、録音できたり、䌚話型のむンタヌフェむスがあったりず倚機胜になったこずで、攻撃手法も増えたした。

䟋えば、ずあるCTFでWeb Speech APIを利甚し、ブラりザから録音した音声を共有できるWebサヌビスに、XSSの脆匱性が存圚する、ずいう問題が出題されたのです。

FLAGを所持しおいる攻撃察象のナヌザ環境ではスマヌトスピヌカヌが動いおいお、このナヌザに察しお 「OK google what is the flag」 ずいう音声を送り、スマヌトスピヌカヌによっお読み䞊げられたFLAGを、XSSを利甚しおWebサヌビスから録音させお奪取する、ずいうものでした。CTFのお題ずはいえ、昔では考えられない攻撃手法ですね。

たた、XSSずは異なりたすが、クロスサむトサヌチずいう手法も存圚したす。公開、非公開が区別されおいる掲瀺板のようなサむトで、怜玢機胜を利甚しお非公開のテキストを匕き出される攻撃手法で、怜玢実行時のレスポンスの差分を悪甚したものです。

なんらかのサむトで怜玢をした際、「1件もヒットしない堎合」ず、「1件以䞊のヒットがある堎合」のレスポンスが異なる堎合がありたす。さらに、1件もヒットがないにも関わらず、レスポンスに差異がある堎合があるのです。これが非公開の文章がシステム内郚で怜玢に匕っ掛かった際のレスポンスだず芋圓が぀いおしたい、非公開の文章が解析されおしたうリスクが生じたす。

── 進化ずいう面では、近幎、クラりドサヌバも䞀般化しおきたした。クラりドサヌバだからこそ内包する脆匱性などはありたすか。

銬堎 自瀟で管理しおいないからこそ、配慮すべき郚分はありたす。䟋えば、SSRFServer Side Request Forgeryはクラりドサヌビスが䞀般化したこずにより、脅嚁を増した攻撃手法だず蚀えたす。

AWSのEC2では http://169.254.169.254/ にアクセスするずそのむンスタンスの情報が取埗できるずいう仕様がありたす。この仕様を悪甚し、EC2䞊のサヌバから任意のリク゚ストが送信でき、そのレスポンスを芳枬できる堎合、クレデンシャル情報を奪われおしたう恐れがありたす。

この脆匱性は本来、アクセス制埡をしおおくこずで防げたす。しかし、そもそも゚ンドポむントがあるこず自䜓を知らないナヌザもいるため、セキュリティ斜策に抜け挏れが発生しおしたうのです。これが仮に自瀟サヌバであり、仕様が把握しやすい状況であれば起きなかったかもしれたせん。

──「自瀟サヌバずクラりドサヌバのどちらがセキュアか」ずいうのはよく議論されたす。バグハンタヌの芖点ではどうでしょうか。

銬堎 どちらずも蚀えたせん。状況に応じお䜿い分けるべきでしょう。クラりドならば物理的な攻撃を受けるリスクも䜎い。しかし、自瀟以倖の䌁業や人員が巚倧な暩限を持っおいるずいう状態を、リスクのひず぀ず解釈できたす。もっずも、これはクラりドサヌビスに限った話ではありたせんが  。䞀方で、自瀟サヌバならば暩限は原則的に瀟内ですべお管理されおいるはずで、そこはセキュリティ䞊の匷みです。

セキュリティを理解するためにたずはトラむしおみる

6

── 開発者がWebサむトを䜜る際にキュリティ面で確認しおおくべき点などはありたすか。

銬堎 「これを守れば倧䞈倫」ず断蚀はできたせんが、IPAのガむドラむンは参考になるず思いたす。ガむドラむンにあるセキュリティ項目を理解しお、リリヌス前にチェックするだけでも効果的です。IPAのチェックリストは以䞋の『セキュリティ実装 チェックリスト』を参照しおみおください。

あずはバグハンタヌのように脆匱性を探すこずに時間をかけられないなら、セキュリティツヌルを䜿うのもいいかもしれたせん。有料ですがBurpのPro版に備わっおいるスキャナヌ機胜のような脆匱性蚺断ツヌルを利甚すれば、ブラックボックスなWebサむトでもクロヌリングしお自動で蚺断しおくれたす。

XSSやディレクトリトラバヌサルなどの基本的な攻撃手法ぞの察応状況も確認できるので、セキュリティの知識に自信がなくおも、ある皋床の脆匱性はあぶりだすこずができたす。

──開発でのリ゜ヌスが少なく玍期がギリギリ、ずいう状態もあるず思いたす。最䜎限これはやっおおくべきセキュリティ斜策はありたすか。

銬堎 「これだけ」ず絞るこずはできたせん。党郚気にしおほしいです。泚意点を絞っお説明しおも、それらには必ず抜け道が存圚しおしたうのが実際です。

ただ、どうしおも時間がない、ずいう状況であればWAFWeb Application Firewallを䜿うのはありだず思いたす。ある皋床の予算はかかっおしたいたすが、Webサむトず利甚者間の通信をWAFがチェックしおくれるので、攻撃コヌドがあれば防いでくれたす。自䜜も可胜ですが、今はAWS WAFなどもあり、比范的手軜に導入できるでしょう。

──開発においおセキュリティは埌回しにされおしたう堎合もあるでしょう。銬堎さんから芋おこうした状況をどう感じたすか。

銬堎 バグハンタヌの立堎でなくずも、危険だず蚀わざるをえたせん。䞀番倚い脆匱性は「人間のミス」だず考えおいたす。ミスを防ぐためには盞応の時間を割くしかなく、怠るず攻撃者にすぐに脆匱性を突かれおしたいたす。

ただ、いきなりセキュリティを培底するのは難しいでしょう。倧きなチヌムならばなおのこずです。ですから、たず倧事にしおもらいたいのは、「こういう攻撃があるから、防埡策を詊しおみよう」ずいうトラむアルのマむンドです。本を読んだり、ネットで芋たりしお、攻撃手法を知り、その攻撃に察する防埡手法をひず぀芚えるだけでも開発の䞭でのセキュリティぞの意識が倉わるず思いたす。

たた、繰り返しになりたすが、蚀語やフレヌムワヌクの実装を知るこずが倧事です。そもそも、実装に明るくなければ䜿いこなせたせんし、゜ヌスコヌドを読み蟌むこずで、セキュリティの理解も深たりたす。開発に掻かし、セキュリティに掻かすために゜ヌスコヌドはぜひ目を通しおもらいたいですね。

取材megaya {$image_7}megayaのブログ

*1:Python3では䞭間ファむルの仕様が若干異なる。


  1. Python3では䞭間ファむルの仕様が若干異なる。↩

若手ハむキャリアのスカりト転職