サイバー攻撃の種類と対策
1. サイバー攻撃とは?
サイバー攻撃とは、インターネットやネットワークを通じてシステムやデータに不正なアクセスを行い、情報の盗難・破壊・改ざん・サービスの妨害などを目的とする攻撃のことです。
攻撃者(ハッカー、クラッカー、サイバー犯罪者など)が、個人・企業・政府機関のデータやシステムを標的にすることが多く、金銭的な利益、政治的な目的、単なる愉快犯的な行動など、動機はさまざまです。
2. サイバー攻撃の種類
サイバー攻撃にはさまざまな種類があり、それぞれ異なる目的や手法を持っています。
主な種類を以下に紹介します。
2.1 マルウェア(Malware)攻撃
悪意のあるソフトウェアを使った攻撃の総称で、以下の種類があります。
- ウイルス(Virus)
自己増殖し、他のファイルやプログラムに感染する。 - ワーム(Worm)
ネットワークを通じて自己増殖する。 - トロイの木馬(Trojan Horse)
無害なソフトを装い、バックドアやスパイウェアを仕込む。 - ランサムウェア(Ransomware)
ファイルを暗号化し、解除のために身代金を要求する。 - スパイウェア(Spyware)
個人情報や機密データを盗み出す。
例:
Webサイトにアクセスすると、知らない間に悪意のあるプログラムがダウンロードされ、ユーザーのPCがウイルス感染する。
被害:
ユーザーの個人情報が盗まれたり、PCがランサムウェアに感染してデータが暗号化される。
2-2. フィッシング(Phishing)
偽のWebサイトやメールを使ってユーザーのIDやパスワード、クレジットカード情報などを盗む手法。
- スピアフィッシング(Spear Phishing)
特定の個人や組織を標的にする手法。 - ビジネスメール詐欺(BEC, Business Email Compromise)
偽の経営者メールで送金を指示する。
例:
本物の銀行やECサイトを装った偽サイトが作られ、ユーザーがログイン情報を入力すると攻撃者に送信される。
被害:
クレジットカード情報やログインID・パスワードが盗まれ、不正利用される。
2-3. DDoS(Distributed Denial of Service)攻撃
多数のコンピュータから標的のサーバーに大量のリクエストを送信し、サービスを停止させる攻撃。
例:
人気のECサイトに大量のリクエストを送り続け、サーバーをダウンさせる。
被害:
正常なユーザーがサイトにアクセスできなくなり、売上や信頼が低下する。
2-4. ゼロデイ攻撃(Zero-Day Attack)
ソフトウェアの未修正(パッチ未適用)の脆弱性を狙った攻撃。
例:
CMS(例: WordPress)の未修正の脆弱性を悪用し、管理者権限を奪ってサイトを改ざんする。
被害:
サイトが乗っ取られ、マルウェアが仕込まれたり、訪問者の情報が盗まれる。
2-5. SQLインジェクション(SQL Injection)
Webアプリの入力フォームなどに不正なSQL文を挿入し、データベースを操作する攻撃。
例:
Webサイトのログイン画面に '; DROP TABLE users; -- のようなSQL文を入力すると、データベースが破壊される。
被害:
ユーザー情報が漏洩したり、データベースが削除される。
2-6. クロスサイトスクリプティング(XSS, Cross-Site Scripting)
Webサイトに悪意のあるスクリプトを埋め込み、ユーザーのブラウザ上で実行させる攻撃。
例:
ユーザーが投稿できるコメント欄に <script>alert('ハッキング成功!')</script> を入力すると、他のユーザーのブラウザで実行される。
被害:
ユーザーのクッキー情報が盗まれ、不正ログインされる。
2-7. 中間者攻撃(MITM, Man-in-the-Middle Attack)
通信を傍受し、改ざんや盗聴を行う攻撃。例えば、Wi-Fiの盗聴やHTTPSの偽装がある。
例:
公共Wi-FiでECサイトにログインした際、通信が盗聴され、クレジットカード情報が抜き取られる。
被害:
クレジットカードが不正利用される。
2-8. サプライチェーン攻撃
正規のソフトウェアやハードウェアの開発・流通過程で脆弱性を仕込む攻撃。
例:
Webサイトに導入されている広告スクリプトやCDNが改ざんされ、訪問者がマルウェアに感染する。
被害:
企業が直接攻撃されなくても、ユーザーが被害を受ける。
2-9. ログインクレデンシャル攻撃
- ブルートフォース攻撃(Brute Force Attack):総当たりでパスワードを試す。
例:
Webサイトの管理画面(例: example.com/admin)に対し、自動プログラムでパスワードを総当たり攻撃する。
被害:
弱いパスワードのアカウントが乗っ取られる。 - 辞書攻撃(Dictionary Attack):一般的な単語を使ってパスワードを解読する。
例:
ユーザーのパスワードが「password123」のような簡単なものだと、辞書にある一般的なパスワードを試すことで突破される。
被害:
アカウントが乗っ取られる。 - クレデンシャルスタッフィング:流出したID・パスワードを使い回して不正ログインを試みる。
例:
他のサイトで流出したID・パスワードのリストを使い、大手ECサイトにログインを試みる。
被害:
パスワードを使い回しているユーザーのアカウントが不正アクセスされる。
3. サイバー攻撃の対策
3-1. マルウェア(Malware)攻撃
- ファイルアップロード機能がある場合、アップロードされたファイルの拡張子やMIMEタイプを厳格にチェック。
- .exe, .js, .php などの危険なファイルをアップロード禁止。
- Webサイト内でアップロードされたファイルを直接実行させない設定(例: upload ディレクトリに execute 権限を与えない)。
- ファイルをサンドボックス環境で処理する。
3-2. フィッシング(Phishing)
- Content-Security-Policy (CSP) を設定し、外部の不正スクリプトを防ぐ。
- サイト内のリンクを確認し、外部サイトへの遷移を明示する。
- 外部リンクに rel="noopener noreferrer" を追加し、悪意のあるサイトへのリダイレクトを防ぐ。
3-3. DDoS(Distributed Denial of Service)攻撃
- Rate Limiting(リクエスト制限) を導入し、一定時間内のリクエスト回数を制限。
- CDN(Cloudflareなど)を活用し、DDoS攻撃の緩和。
- APIリクエストの回数を制限する(debounce や throttle を使用)。
3-4. ゼロデイ攻撃(Zero-Day Attack)
- フレームワークやライブラリの定期的なアップデート
- WAF(Web Application Firewall)の導入
- コードレビューとセキュリティテストを定期的に実施
- React のバージョンを常に最新にする。
- 外部ライブラリのセキュリティチェック (npm audit を使用)。
3-5. SQLインジェクション(SQL Injection)
- プリペアドステートメントを使用する(生SQLを使わない)。
- API側(バックエンド)での対応がメインだが、React 側ではユーザー入力のバリデーションを行う。
- ユーザー入力を直接SQLに埋め込まない。
- コード例
//(LaravelのEloquentでSQLインジェクション対策):
$user = User::where('email', $request->input('email'))->first();
// NG例(危険なコード - SQLインジェクションのリスクあり):
$user = DB::select("SELECT * FROM users WHERE email = '".$request->input('email')."'");
3-6. クロスサイトスクリプティング(XSS, Cross-Site Scripting)
- HTMLエスケープ(htmlspecialchars() など)
- dangerouslySetInnerHTML を使用しない
- ユーザーの入力を直接HTMLに反映しない
- CSP(Content Security Policy)を設定
3-7. 中間者攻撃(MITM, Man-in-the-Middle Attack)
- HTTPSを強制する(HSTSを設定)
- 認証情報はPOSTで送信し、GETを避ける
- API通信ではJWTやOAuthのトークンを使用
3-8. サプライチェーン攻撃
- CDNや外部ライブラリは信頼できるソースからのみ利用
- NPM/Yarnのパッケージを定期的にアップデート
- npm の package-lock.json を固定し、意図しないライブラリの変更を防ぐ
- パッケージの脆弱性チェック(npm audit, yarn audit)
3-9. ログインクレデンシャル攻撃
ブルートフォース攻撃 & 辞書攻撃対策
- ログイン試行回数の制限(Rate Limiting)
- パスワードの複雑性チェック(8文字以上、大文字・小文字・記号を含む)
クレデンシャルスタッフィング対策
- 2FA(二要素認証)を導入
- ログイン時にIPやデバイスをチェック
- 流出したパスワードリストと比較
Discussion