はじめに
セキュリティ対策は、出来ていなくても動作に問題が生じることはなく、取り合えず、動いているから、問題ないなんて考えていると、意外な所で、痛い目に合います。設計漏れなんかがそれにあたるのでは、ないでしょうか?そこで、そうならない為に、エンジニアとして、最低限、知っておきたい10種類の脆弱性、攻撃例、対策方法について、まとめました。今後、システムを構築する際の参考にして頂けましたら、幸いです。
1. SQLインジェクション (SQL Injection)
脆弱性
アプリケーションがユーザー入力を適切に検証せずにSQLクエリに組み込む場合、攻撃者が任意のSQLコードを実行できる脆弱性。
攻撃例
攻撃者がログインフォームに ' OR '1'='1
などのSQLコードを入力し、データベースに不正アクセスする。
対策方法
- パラメータ化されたクエリを使用する。
- 入力データの検証とエスケープ処理を適切に行う。
- 権限管理を徹底する。
- 最新のバージョンのソフトウェアを使用する。
2. クロスサイトスクリプティング (XSS)
脆弱性
ウェブアプリケーションがユーザー入力を適切にエスケープせずにHTMLコンテンツとして表示する場合、攻撃者が悪意のあるスクリプトを実行できる脆弱性。
攻撃例
攻撃者がコメント欄に <script>alert('XSS');</script>
のようなスクリプトを入力し、他のユーザーがそのページを閲覧した際にスクリプトが実行される。
対策方法
- 入力データの検証とエスケープ処理を適切に行う。
- コンテンツセキュリティポリシー(CSP)を導入する。
- 最新のバージョンのソフトウェアを使用する。
3. クロスサイトリクエストフォージェリ (CSRF)
脆弱性
ユーザーが認証された状態で、攻撃者がユーザーの意図しないリクエストを送信させる脆弱性。
攻撃例
攻撃者がユーザーに悪意のあるリンクをクリックさせ、ユーザーのアカウントで不正な操作(例:パスワード変更、送金)を行わせる。
対策方法
- CSRFトークンを使用する。
- リファラーチェックを行う。
- セッションの有効期限を短く設定する。
4. バッファオーバーフロー (Buffer Overflow)
脆弱性
プログラムが固定長のバッファに対して過剰なデータを書き込む場合、メモリの他の部分にデータが上書きされる脆弱性。
攻撃例
攻撃者が特定の入力を通じてバッファをオーバーフローさせ、任意のコードを実行する。
対策方法
- 入力データの検証と範囲チェックを行う。
- 安全なプログラミング言語を使用する。
- 最新のバージョンのソフトウェアを使用する。
5. ディレクトリトラバーサル (Directory Traversal)
脆弱性
アプリケーションがユーザー入力を適切に検証せずにファイルパスとして使用する場合、攻撃者がシステム上の任意のファイルにアクセスできる脆弱性。
攻撃例
攻撃者が ../../etc/passwd
のようなパスを入力し、システムの重要なファイルにアクセスする。
対策方法
- 入力データの検証を行う。
- パスの正規化を行う。
- 脆弱性対策パッチを適用する。
- ファイアウォールを設定する。
6. セッションハイジャック (Session Hijacking)
脆弱性
セッションIDが盗まれることで、攻撃者が正当なユーザーとしてシステムにアクセスできる脆弱性。
攻撃例
攻撃者がネットワークトラフィックを盗聴してセッションIDを取得し、そのIDを使ってユーザーのセッションを乗っ取る。
対策方法
- HTTPSを使用する。
- Cookieの設定を「常に削除する」に設定する。
- 脆弱性対策パッチを適用する。
- ファイアウォールを設定する。
- 二段階認証を利用する。
7. マルウェア (Malware)
脆弱性
システムやアプリケーションに対して悪意のあるソフトウェアがインストールされる脆弱性。
攻撃例
攻撃者がフィッシングメールを通じてマルウェアを配布し、ユーザーのシステムにインストールさせる。
対策方法
- セキュリティ対策ソフトを導入する。
- OSやソフトウェアを最新の状態に保つ。
- 怪しいメールや添付ファイルを開かない。
- 不審なWebサイトにアクセスしない。
- パスワードを使い分ける。
- ファイアウォールを設定する。
8. フィッシング (Phishing)
脆弱性
ユーザーが偽のウェブサイトやメールに騙されて個人情報を提供してしまう脆弱性。
攻撃例
攻撃者が銀行のログインページを模倣したウェブサイトを作成し、ユーザーにログイン情報を入力させる。
対策方法
- 送信者やURLの正当性を確認する。
- 公式WebサイトのURLを確認してからアクセスする。
- フィッシング対策ソフトを導入する。
9. ランサムウェア (Ransomware)
脆弱性
コンピュータシステムを暗号化し、使用不能にしたうえで、復旧の対価として身代金を要求する悪質なソフトウェア。
攻撃例
攻撃者がリモートコード実行(RCE)脆弱性を悪用してランサムウェアをインストールする。
対策方法
- バックアップを定期的に行う。
- 最新のセキュリティ対策ソフトを導入する。
- 従業員へのセキュリティ教育を徹底する。
10. ブルートフォース攻撃 (Brute Force Attack)
脆弱性
パスワードなどの認証情報を推測するために、様々な組み合わせを自動的に試行する攻撃。
攻撃例
攻撃者が自動化ツールを使用して、パスワードを推測し続ける。
対策方法
- 強力なパスワードを設定する。
- 二段階認証を有効にする。
- アカウントロックアウト機能を有効にする。
これらの脆弱性と攻撃の例を理解し、適切な対策を講じることで、システムやアプリケーションのセキュリティを強化することができます。
ご参考 ハンズオンで攻撃の流れを確認することも出来ます