Cake.jp技術部の山内です。
みなさん、セキュリティ対策してますか?
新しいコードはある程度気をつけていても、古いコードに脆弱性が残っていたりはしませんか?
優先度が上げられず、脆弱性が残り続けていませんか?
・・・。
弊社がどうなのかはあえて明言しませんが、上記の状況を打破すべく(ほぼ言っている)、有志にて金曜日の17時から脆弱性対応という会を行なっています。
2024/05から現在(2024/11時点)まで、約半年ほど行なっています。
本日はその会について話していきます。
会の目的
会を行う目的は、大きく2つあります。
- 脆弱性のある箇所を減らす
- セキュリティ意識を上げる
ここについては狙い通り進められていると思います。
後者の「セキュリティ意識を上げる」は、レビューでの指摘などを通して、参加者に限らず全体に広がっていっているように感じます。
セキュリティへの意識が上がったことをキッカケに、2024/07~2024/10にかけて『Webブラウザセキュリティ ― Webアプリケーションの安全性を支える仕組みを整理する』という書籍を輪読会で読んだことも、意識向上につながっていると思います。
会の流れ
この会をどのように進めているかについてですが、一人がドライバーになり、他の人はそれを見つつ意見を言う、モブプロ形式で行なっています。
ドライバーは日毎に固定で、ツールはSlackのハドルを使用して、画面共有をしています。
対応する内容は、「対応したいことリスト」が存在するので、そこから選んで対応します。
対応完了したものは、翌月曜日にリリースしています。
対応したこと
色々と対応してきていますが、主には以下を潰していっています。
- SQLインジェクション対策
- XSS対策
- ファイルアップロードの脆弱性対策
SQLインジェクション対策は、実際に攻撃する穴があってそれを塞いでいるというよりは、そういったアクセスがあった時点でブロックするような対応を行っています。現在まで何週にもわたって対応を続けています。
他には、脆弱性対応の会と言いつつも直近で発生した不具合を調査したり、問い合わせの調査をしたりということも行っており、柔軟に対応することを決めています。
発見経路の一例
前述した内容を対応するには、それらを発見する必要があります。
脆弱性診断を受け発見された例もありますが、それ以外を一つ紹介します。
弊社では開発言語としてPHPを使用しており、現在使用しているバージョンは8.3です。
1年半前までは5.6で、この1年半で少しずつバージョンを上げてきました。
バージョンが上がるごとに言語としての厳格さが増してきており、それに伴って今まではエラーにならなかったものがエラーになるようになっていきました。
そのエラーを調べてみると攻撃を受けていた、というケースもあり発見に至りました。
そういったものも、この会で対応していっています。
効果
対応したことであげたSQLインジェクション対策の効果について触れていきます。
(XSSとファイルアップロードの脆弱性については、そこを攻撃されたという記録はなく「塞いだ!」としか言えないので、、、)
まず前提として、弊社ではWAFを導入しています。
しかしWAFをすり抜けてくる攻撃が少なくありません。
(SQLエスケープしているので、データベース改ざんなどの被害はありませんが)
それがアプリケーションサーバやデータベースサーバの負荷が上がる原因になっていました。
SQLインジェクション対策によって、攻撃がアプリケーションに到達しにくくなり、攻撃があっても、アプリケーションサーバやデータベースサーバの負荷が上がりにくくなりました。
おかげで、休日に攻撃を受けて攻撃者をブロックする、という回数が激減して嬉しい限りです。
今後について
会の拡充はそこまで考えていません。
今は、「週の終わりにそこまで気張らず」というような雰囲気でやっています。
継続的にやれている一つの要因ではあると思っています。
このまま続けていって、少しでも堅牢なサービスを目指して続けていければと思います。
引き続きセキュリティ意識を高めていって、「セキュリティ意識高い系」な開発組織になっていければと思います。