🔐 RailsエンジニアのためのWebセキュリティ入門
銀座Rails#8で行われた徳丸 浩さん (@ockeghem) の講演『RailsエンジニアのためのWebセキュリティ入門』に参加してきました! 🏃💨
本日19時から銀座にてですが、キャンセルのためお席の余裕ができたようです。Railesアプリのセキュリティについてトークします / “銀座Rails#8 @リンクアンドモチベーション - connpass” https://t.co/1DBQfEBoXk
— 徳丸 浩 (@ockeghem) April 24, 2019
徳丸さんとはエンジニアのための法律勉強会で初めてお会いし、最近だとウェブ・セキュリティ試験の運営団体『BOSS-CON JAPAN』経由でご一緒することがあります。といってもYassLab社はRails技術者認定試験に協力しているものの、PHPやPythonなどの他の試験にはほとんど関わっていないので、『徳丸さん達が隣で面白いことをやっているなー』『どこかでRuby/Railsの話も聞いてみたいなー』というぐらいでしたが 😅
そんな徳丸さんが今回『RailsエンジニアのためのWebセキュリティ入門』のお話をされるとのことなので参加してきたのですが、思っていた以上に濃い内容でした。本記事ではその一部を皆さんにご紹介しようと思います 📝💨
題材はなんと
Railsチュートリアル…!!
今回の講演では「脆弱性のあるコードを入れてしまうとどんなことが起こるのか?」という DEMO がいくつか行われたのですが、なんとその題材の1つに弊社が運営する『Railsチュートリアル』を選んでいただきました!! 😻
具体的にはRailsチュートリアルで開発するSNS (通称: Sample App) に誤ったコードを入れてしまうとどんなことが実現できてしまうのかという方向で様々な DEMO が行われました。
例えば次のように protect_from_forgery
のコードをいじったり、csrf_meta_tags
を削除したり、has_secure_password
を使わずにパスワードを保存した場合にどんなことが起こり得るのか、といった様々な例 (CSRF, XSS, SQLインジェクションなど) を実演していました。
本講演のスライドも現在は公開されています。詳細は次のスライドを見ていただくこととして、本記事ではその中でも印象に残った例を1つご紹介しますね。
😈 例: パスワードを
ハッシュ化しないで保存する
Railsチュートリアルでも暗号化とハッシュ化の違いや、なぜパスワードは暗号化ではなくハッシュ化なのかと言った説明がされていますが、本講演でもその概要を分かりやすく説明されていました。技術的な攻撃方法やその対策も紹介されていましたが、個人的には「実際に流失した場合どんなことが起こるのか?」といった事例が印象的でした。
最近だと宅ふぁいる便の件が記憶に新しいですが、パスワードを含む情報流出の事件は過去にもあり、中には訴訟およびその判決が出ている事例もあります。
📜 SQLインジェクション対策もれの責任を開発会社に問う判決 | 徳丸浩の日記
ざっくりと簡単にまとめると、情報流出したサービスの受託開発会社に対して約3131万円の損害賠償の訴訟が起こった。契約書では損害賠償責任制限を定めていたが『SQLインジェクション対策を怠ったことは重過失である』という結果になったためその制限も無効となり、次のような判決が命じられたというものです。
結果、3131万9568円の損害を認定し、
その3割を控除して、2262万3697円の損害賠償をY社に命じた
(※ 上記記事からの引用です)
こういった判決文を見ると『セキュリティ対策を頑張る価値は十分にある…!!』という気にもなりますね 😆🔐✨
なお、この判決については YassLab 社の顧問弁護士でもある野島 梨恵氏が『エンジニアのための法律勉強会』で解説しています。@koyhoge さんがまとめた次の記事を読むとさらに詳しい状況が分かるので、もし興味あればぜひチェックしてみてください 👀✅
📜 エンジニアのための法律勉強会#2『判例に学ぶ、受託開発時の注意事項』参加メモ - Gist
Railsにおける基本対策は
『バージョンを上げる』
徳丸さんの講演ではもちろん対策についても触れています。簡潔にまとめると『Railsのフレームワークは (セキュリティの観点から見て) よく出来ている』、『Railsのバージョンを上げよう』、『Railsのレールから外れる場合は慎重に』という話が中心だったかなと感じています。
例えば徳丸さんが以前に見つけたSQL周りの脆弱性もRailsの5系以上では既に直っていたり、冒頭で述べた protect_from_forgery
や csrf_meta_tags
、has_secure_password
などのレールにうまく乗っている限りにおいては脆弱性は簡単には見つけられない、とのことでした。
実際、今回の題材としていただいたRailsチュートリアルの『Sample App』についても、アプリケーションコードからは脆弱性を見つけられなかったと懇親会で伺いました。ただし、あくまでもRailsチュートリアルで書くことになるコード部分についてのみで、Gemfile を通して導入される各種ライブラリまでじっくり調べていけば、脆弱な部分は見つけられるかもしれません 🤔💭
Railsチュートリアルでは読者が自力で解決しづらいエラーに遭遇しないように Gemfile でバージョンを固定しています。もちろん書籍内でもその旨を明示していますが、導入しているライブラリのバージョンが古いために、最新バージョンでは既に対策済みの脆弱性が残っていてもおかしくはありません。
最後の拡張編でも紹介していますが、Railsチュートリアルでは完走後の演習課題として Sample App の Gemfile や Rails 自身のアップグレードをオススメしています。Railsチュートリアル完走後にプロダクト開発を始める方々も多いと思いますが、そのときは徳丸さんからのアドバイス『Railsのバージョンを上げよう』『Railsのレールから外れる場合は慎重に』を意識していくと良さそうですね 😆
最後に
徳丸さんの講演の最後では、RailsチュートリアルやRailsガイドの『Railsセキュリティガイド』 をオススメしていただけました 😻 (嬉しい!)
徳丸さんの講演『RailsエンジニアのためのWebセキュリティ入門』で #Railsチュートリアル が紹介されてたー!やったー!嬉しい!!😻✨ #ginzarails
— 安川要平/Yohei Yasukawa (@yasulab) April 24, 2019
> Rails Tutorial を勉強しましょう pic.twitter.com/kEMpH2weKx
とはいえセキュリティに関するトピックは『1回対策したら終わり』というわけではなく、日々の情報のキャッチアップも重要です。例えば RubyKaigi 2019 でアナウンスされた RubyGems.org の MFA 設定がありましたが、皆さんはもう設定されましたか? 🔐✅
📜 RubyGems.org に多要素認証(MFA)を設定してください - TechRacho
YassLab 社ではプロダクト開発をする様々な方々に『Railsチュートリアル』や『Railsガイド』をお届けしているので、引き続き徳丸さんにも納得していただける良質なコンテンツを維持していきたいと思います 📚✨
今後ともよろしくお願いします…!! (>人< )✨
🐣 合わせて読みたい: 銀座rails #8 - Togetter
https://togetter.com/li/1341460
📣 【PR】YassLab 社では社員研修に特化したRailsチュートリアルの『法人プラン』、Rails開発の生産性を高めるRailsガイドの『Proプラン』を提供しています。ぜひお試しして頂けると嬉しいです ;)
最近のお知らせ
- 11/18 🎓 Ryukyufrogs に学習支援で協賛
- 11/13 📕 Railsガイドが Rails 8.0 に対応しました
- 11/12 🎤 インタビュー収録「留学から起業まで」
- 11/08 💎 RubyWorld Conference 2024 に登壇
- 08/28 🎓 JPHACKS 2024 に学習支援で協賛
- 08/16 📕Railsガイドが Rails 7.2 に対応しました
- 08/14 💞 協賛プラン導入事例: 虎の穴ラボ
- 07/19 🎁 AWS賞の副賞を受け取りました!
- 07/10 💞 協賛プラン導入事例: GA technologies
- 07/08 💞 協賛プラン導入事例: note