SQLi
SQL インジェクション
入力した文字列が SQL の命令として読まれ、ほかの人のデータまで読まれたり書き換えられたりします。
どこで混ざるか
値として渡すはずの入力が、命令の文字列に連結される所
守る側の要点
- 値はプレースホルダで渡し、命令と混ぜない
- 列の名前や並び順は、許した候補から選ぶ
- データベースの利用者の権限を、要る分だけにする
XSS
クロスサイトスクリプティング
画面に出した入力がスクリプトとして動き、利用者のブラウザの中で、その人の権限で操作されます。
どこで混ざるか
データとして出すはずの入力が、HTML や JavaScript として解釈される所
守る側の要点
- 出す場所 (本文、属性、URL) に合ったエスケープをする
- テンプレートの自動エスケープを外さない
- CSP で、読み込めるスクリプトを絞る
CSRF
クロスサイトリクエストフォージェリ
別のサイトを開いただけで、ログイン中のサービスに本人の意図しない書き込みが送られます。
どこで混ざるか
ブラウザが Cookie を自動で付けて送る所
守る側の要点
- 状態を変える操作は GET で受けない
- Cookie に SameSite を付け、トークンか Origin を確かめる
- 大事な操作は、もう一度本人に確かめる
SSRF
サーバーを踏み台にした内部への到達
URL を取りに行く機能が悪用され、外からは届かない社内の機械や設定の置き場へ、サーバーが代わりに届いてしまいます。
どこで混ざるか
外の利用者が決めた行き先へ、内側のサーバーが通信する所
守る側の要点
- 行き先は許した相手だけにし、名前を引いたあとの住所も確かめる
- 転送の追いかけを止めるか、毎回確かめ直す
- クラウドの設定の置き場は、トークン必須の方式にする
IDOR
他人のデータに届く認可の漏れ
URL の番号を 1 つ変えるだけで、ほかの人の注文や書類が見えてしまう穴です。
どこで混ざるか
ログインした人と、頼まれたデータの持ち主を突き合わせる所
守る側の要点
- すべての操作で、その人がそのデータを扱ってよいかを確かめる
- 確かめる処理を 1 か所にまとめ、書き忘れを防ぐ
- 2 人の利用者で、互いのデータに届かない試験を置く
ディレクトリの外へ出る穴
パストラバーサル
ファイル名に上の階層を指す書き方を混ぜられ、置き場の外にある設定や鍵のファイルを読まれます。
どこで混ざるか
受け取った名前を、そのままファイルの住所につなげる所
守る側の要点
- 利用者の付けた名前を使わず、こちらで ID を振って保存する
- 住所を正規化してから、置き場の中かを確かめる
- 保存する場所と配る場所を分ける
デシリアライズ
安全でないデシリアライズ
受け取ったデータをプログラムの部品に戻すときに、部品の中の処理まで呼ばれ、任意のコードが動きます。
どこで混ざるか
外から来たバイト列を、型や処理を持つ部品に戻す所
守る側の要点
- 外から来たデータは JSON のような、処理を持たない形で受ける
- 型を戻す仕組みを使うなら、戻してよい型を絞る
- 署名は改ざんを防ぐだけで、中身の安全は保証しないと覚える
供給網の攻撃
サプライチェーン攻撃
使っている部品、ビルドの環境、委託先が先に破られ、正規の更新や取引の顔をして入ってきます。
どこで混ざるか
自分の外で作られた物を、確かめずに信じて取り込む所
守る側の要点
- 使っている部品の一覧 (SBOM) を作り、穴の情報と突き合わせる
- 取り込む物の署名と版を確かめ、勝手に上がらないよう固定する
- 委託先の権限を絞り、連絡の経路を先に決めておく
偽のログイン画面と連絡
フィッシング
本物そっくりの連絡や画面でパスワードや認証の番号を入れさせ、本人として入り込みます。
どこで混ざるか
人が、画面や連絡の送り主を目で見て信じる所
守る側の要点
- ドメインに結び付くパスキーで、偽の画面に入れても使えないようにする
- 認証の番号の転送や、承認の押しすぎに気づける記録を残す
- 助けを求める電話やチャットでも、本人確認の手順を変えない
侵入から暗号化まで
ランサムウェアの侵入の流れ
1 つの入口から入り、権限を広げ、控えごと暗号化して、データの持ち出しと合わせて脅す流れです。
どこで混ざるか
外から入れる機器や接続と、社内の管理者の権限の間
守る側の要点
- 外からの接続はすべて多要素認証にし、例外を作らない
- 控えはネットから切り離した場所にも置き、戻す練習をする
- 管理者の権限の使われ方を見張り、夜間の動きに気づける記録を持つ
リスト型攻撃
パスワードの使い回しを狙うリスト型攻撃
ほかのサービスから漏れた ID とパスワードの組を、別のサービスのログインで次々に試されます。
どこで混ざるか
ログインの画面が、だれからの試行でも同じように受け付ける所
守る側の要点
- 多要素認証かパスキーを用意する
- 試行の回数と、失敗の偏りを見て止める
- 漏れたパスワードの一覧と照らし、使わせない
許された以上の権限を得る
権限昇格
ふつうの利用者の権限で入ったあと、設定の誤りを足がかりに、管理者の権限まで広げられます。
どこで混ざるか
権限の低い処理と、高い権限で動く処理や設定の間
守る側の要点
- 高い権限で動く物を減らし、要る時だけ持たせる
- 管理者の操作は記録し、ふだんと違う使い方に気づく
- 設定の見直しを、出す前の判定の項目に入れる