Hackademy Facebookページはこちら
岡田 やっぱり若い人たちが新しいインフラストラクチャ使いこなせるようにしていくっていうときの、阻害要因になっちゃだめだなっていうことですよね。トレーニングという意味では。なんかとってつけたようなうまい流れですけど、セキュア開発ブートキャンプ。これがね、みんな若かったんですよ。
蔵本 あー、それは素晴らしい。
岡田 で、受講生に年齢こそ聞いていないけど、次にリーダーにならなくちゃいけない、みたいな感じの人が上司から「おまえ、行ってこい」っていう感じで来られてて。上司が来ていないんですよ。あ、いい流れだなって。
蔵本 ええパターンですね、それね。
岡田 名古屋とかね、兵庫とかね、山口とかね、えらい地方からも来られていて。で、若いんだよ。
蔵本 それはみんな、デベロッパーの人?
岡田 そうそう。プロダクト・マネージャークラスが来るのかなって思っていた。プロジェクトちゃうよ。プロダクト。サービス開発の何をどうせなあかんみたいなリーダーが来るのかなと思っていたら、そういうひとにならなあかん感じの人がきた。デベロッパー。開発者なんだよね。いや、びっくりしたなあと思って。なんかどっちかっていうと、そこそこ高いコースですよ。2日間で10なん万するんだけど、開発者が来ましたね。1日目に、脆弱性っていったい何?とか、脆弱性はなぜ生まれてどう悪用されるのかみたいなことと、それを防ぐためにはどうってそれを学んでいくと、ひとつの防ぎ方で複数倒せるっていうのが、つまりひとつの攻撃で複数やられるかもしれないけど、同じように一つの防ぎ方で複数の脆弱性が止まるっていうこと。これがわかったところで、2日目は要するに治療医学ではなくて予防医学。ということは、あらかじめこうしておけば、だいぶ未知のものも振り落とせるよっていう話をしたわけなんですよ。で、僕はしみじみと、OWASPのドキュメントをもう1回みんなで読もうと。意外といいねみたいなね。それこそAzureのテストでさ、OWASPトップ10テストって標準であるじゃない、そのOWASPトップ10テストっていうのは一体何なのか、とか。
(参照:Microsoft Azure での侵入テスト (ペネトレーションテスト) の申請について)
蔵本 はいはい。これは、何をするんやっていう。
岡田 どうやって検証できるのかっていうようなことをね。なんかまたクラウドに媚びを売ったような形になっちゃいますけど(笑)、だけど、やってみたらね、たとえば、1.インジェクション、2.クロスサイトスクリプティング……みたいな感じなんだけど、あのね、ちゃんと読んでみたら、わりとしっかりLDAPインジェクションだったらこういう攻撃もあるとか、コマンドインジェクションはこういう場合はこうだとか、概念レベルでは信頼できないデータと、それを拡大解釈するインタープリターという概念があって。
たとえばブラウザってインタープリターなんですよ。で、シェルもインタープリターでしょ。SQLエンジンもインタープリター。インタープリターに渡すと勝手に自分なりの解釈をして、単なる「文字列」として扱ってくれないよと。という概念がまずちゃんとあって、まず(データを)取り込むときと、インタープリターに渡すときの2カ所の処理が概念としては存在するはず、みたいなことがきっちり書かれていてね。OWASPの啓発担当をけっこうしっかりやってきたつもりでいるんだけど、ちゃんとやらな。OWASPトップ10勉強せなあかんな、させなあかんな、と思いました。
蔵本 なるほどね。
岡田 と同時に、その中でね、割とみんなにとって衝撃があって、僕も伝えてよかったなと思っていることがね。テストする対象が、自分が作ったアプリの範囲だけテストして、たとえばフレームワークとか借りてきたライブラリとか、これ「サードパーティ問題」と言うんだけど、サードパーティモジュールのアップデートあるいはテストが全然ないから、そこが穴になるっていう。これは、去年のAppSecで言ってたんですよ。で、その話をしたの。そしたら、みんな、「そこの部分のテストはどうしたらいいんですか?!」みたいな。もうサードパーティ問題は大問題ですよ。
蔵本 そもそもね、設計する人とか、アーキテクチャデザインする人から考えたら、そういうところの手間を省きたいからサードパーティのやつ使ったりするわけですよ。
岡田 だけどそれって、「アップデートさえしていれば大丈夫」っていう前提やん。
蔵本 はいはいはい。
岡田 だけど、そのアップデートを、これ使ったらええねんって言って、設計のときに組み込んだ人の手が離れちゃうと、これは何せなあかんやつだったっけ?みたいなことで、スルーになっちゃって。「いまだにSHA-1!?」みたいな(笑)
蔵本 あとあの、設計するときに検証したバージョンでやっちゃうとかもありますね。なんか古いねんけど、とかね(笑)
岡田 それ、本当に最悪ですね。それあの、製作会社がWordPressのテーマを書くときに一番最初に開発したときのjQueryのバージョンのまま、一生使ってるっていうやつ(笑)。だからそのモジュールを借りてきているおかげでものすごく楽にできているんだけど、そこをアップデートしていないからクロスサイトスクリプティングがキマる。
蔵本 はいはいはい。まあ、ありがち。
岡田 ありがちでしょ?あれね、問題がクラウドにいくと、その部分も面倒みてくれるようになると大きいと思う。
蔵本 まあそうでしょうねー。
岡田 たとえばMVCのスタック。たとえば.NETフレームワークはWindowsさんが、がんばるかもしれない。互換性も上位互換で行くかもしれない。だけどたとえば、PHPのCakePHPとかさ、あとはJavaで言うStrutsのところは、その部分は…グローバルキャッシュなんとか(注:Global Assembly Cache)っていう仕組みあるやん、Windowsだったら。そこは最新のものをやっていますよね。なので、そういうものを使ってもらって、あとはDeprecated(利用非推奨)なファンクションさえ使ってなかったらスルスルいくようにすればいい。だからサードパーティどうすんのっていう問題って、最終的にはAPIで逃げるしかない。その、内包されてんねんだけど、APIというプロトコルを使うことによって、外部化されて、疎結合になって、結局そこが互換の動きさえしてくれたらOKと。
蔵本 あとはベンダーのほうでうまいことやってくれや、という話ですよね。
岡田 そうそうそう。CPUパワーとかメモリとか安くなっているから、割とそれががっつりハードリンクしてなくてもなんか動くようになるだろうと。
蔵本 それもう最高ですよね。
岡田 それを目指しているんじゃないの?Azureって。
蔵本 いや、もうAzureっていうか、たぶんクラウドってそういうもんなんですよ。そこをいちいち細かいことをやっていたらあまりクラウドの意味がない。みんなそこを狙っているとは思う。
岡田 もうね、JavaのStrutsだけで何人死人が出たんやろと思うくらい(笑)、ここ数年やばかったんですよ。
蔵本 そうですね(笑)
岡田 サードパーティ問題は根が深いし、上物しか結局作ってないわけですよ。サードパーティ問題ってスマホのアプリとかだと、ほとんどが自動的に生成されるコードで出来上がっちゃうでしょ?画面のコントロールだけで作っちゃうから。だから当然ながら自動で生成されたコード側の方に脆弱性があると、そのリビジョンごと死滅じゃないですか。
蔵本 死滅ですね。
岡田 でしょ? それがiPhoneとかAndroidとか問わずあるわけですよ。そこの部分が勝手にアップデートされる…つまり、再ビルドさえしてくれたらOKみたいな感じだったらまだOKなんですけど、オープンソースソフトウェアを使って、あるいは、商用のライブラリでもいいんですけど、使ってやってきているところって、今度脆弱性テストをする場合でも、そこの部分をテスト範囲にしたら、機能チェックのサーフィスが多くなりすぎて、脆弱性検査の範囲にならないとか。
蔵本 そうですね。やらなあかんことがめちゃめちゃ増えますよね。
岡田 なんだけど、楽だから使うでしょ?開発セキュリティは奥が深くて、足回りまで自分で見ないといけないくらいだったら、本当に運用チームは大変だよね。で、それをクラウドで解決していったらいいんですけどね。今のところは検証項目をリスクプロファイルに合わせてもうちょっときっちり検証せなあかん範囲もあるし、あるいは、そのシステムが持っているリスクが軽いんだったらこれくらいでいいよみたいな、そのノウハウを伝授するところぐらいまでが、やっとっていう感じなんですよ。