初めに
昨今、脆弱性に関する記事(情報漏えいなど)を見かけることが多くなりました。
技術が進化していく中でも、結局は人間が作るシステムなので、どこかに脆弱性があるのは仕方ない事なのかもしれません。
ただ、当たり前ですが、手を抜いて言い訳ではないです!
脆弱性を流出してしまうことは、損害賠償だけでなく、サービス、企業としての信頼を失うことになります。
そんなことを頭の片隅にはおいておく必要があると思います。
自分自身、Webアプリを開発するエンジニアとして、最大限のセキュリティ対策をしておくべきであり、またその知識を有しておきべきと思いました。
ということで、OWASP TOP10毎に、どのような攻撃があって、どのようなことを気をつけるべきか学び直しも含めて、まとめてみました。
(今回はTOP1〜3です)
A01:2021 – アクセス制御の不備
どんな攻撃がある?
認可
- 権限によって利用可能な機能があるが、誰でもその機能が利用できてしまう。
(例えば、直リンクで対象機能にアクセスするなど) - URLパラメーターを改ざんして、他ユーザー情報にアクセスできてしまう。
認証
- ログインが必要なシステムにおいて、ログインせずに機能が利用できてしまう。
(例えば、ログイン必要な機能に直リンクでアクセスするなど)
CORSの誤設定
- WebAPIを利用する際に、サーバーサイドのアクセス許可設定がパブリックになっているなど、アクセス元の制限がされていない。
(例えば、本来許可されていないアクセス元から、WebAPI通信できてしまう)
※CORSってなにって方はこちら(なにそれから学ぶCORS)へお願いします。
チェックポイント
- ログイン必要な機能にログインしていないユーザーがアクセスできないようになっているか
- ユーザーがアカウントの権限を超える機能が利用できないようになっているか
- ユーザーの権限に基づき、他ユーザー情報にアクセスできないようになっているか
- WebAPIでアクセス許可する接続元のみがアクセス可能になっているか
参考
A02:2021 – 暗号化の失敗
どんな攻撃がある?
パスワードの暗号化、ハッシュ化
- パスワードデータが流出した際に平文やハッシュ化されておらず、パスワード復号化されて不正アクセスできてしまう。
チェックポイント
- パスワードが平文で保存されていないか
- パスワードが暗号化のみ(ハッシュ化をしていない)でDBデータが流出すると、復号できてしまわないか
- 古いハッシュ化アルゴリズムを使用していないか(推奨は、Argon2、 PBKDF2、 scrypt、 bcrypt等)
- ソルトを使用しているか
参考
A03:2021 – インジェクション
どんな攻撃がある?
SQL
- 画面の入力項目もしくは、パラメータを改ざんして、内部で実行されるクエリを不正なものに変えることができてしまう。
(例えば、or 0 = 0
みたいな条件が足されると、条件が正しく機能しない)
チェックポイント
- アプリケーションからDB操作を行う際のユーザーが必要な権限以上の与えられていないか。
- クエリのパラメーターは、エスケープされているか
- サーバーサイドで入力検証されているか
参考