セキュリティ研修を受けたのでメモ。
内容としては超有名な攻撃とその対策なんだけど、
これを自分の口で説明しようとすると途端に難しい。
SQLインジェクション
多分もっとも有名なやつ。SQL知っていれば説明不要なんだけど、
SQL知らない人に説明するのがちょっと難しい。
簡単に言うと、DBを操作するSQLって命令をいじる攻撃。
たとえばDBの個人情報盗んだり、データを壊したりできる。
攻撃者にとって自由にDB書けるのと同じ。
SELECT ID FROM USER
WHERE NAME = 'ここにフォーム入力値が入る'
とかだったら
SELECT ID FROM USER
WHERE NAME = '' OR 1=1 --'
とかやって全件出力させるとかできる。
UNIONとかで別テーブルの中身もごそっと見れるかもしれない。
'とか()とか--とかをエスケープしていないのが原因。
手動でエスケープする必要はなく
ParameterizedQueryとかで回避するのが一般的。
(いい感じにエスケープしてくれる)
うちのJDBCだとLIKEを使いたい時はちょっとめんどくさい。
クロスサイトスクリプティング(XSS)
クソリプではない。
たとえば記事のコメント欄など、ユーザーが投稿できる部分に
たとえばJavascriptを仕込んだりする攻撃。
cookieを盗めたりできる。
攻撃者にとっては画面を実装できるのと同じ。
対策は、特殊文字をサニタイジング(無害化)すること。
入力するときHTMLの特殊文字<>とかをバリデーションし、
出力するときエスケープする。
クロスサイトリクエストフォージェリ(CSRF)
早口言葉ではない。
攻撃者が作った別のサイトのリンクを踏ませ、
Web決済をさせたり、退会させたり。
攻撃者にとっては第三者をある程度好きに動かせるのと同じ。
第三者が絡むのがこの攻撃のめんどくさいところ。
対策
・ページトークンを発行・確認する
(最近はWebフレームワークがやってくれる)
多分この3つがWEBエンジニアが気を付けないといけない攻撃。
対策とセットで頭にいれておこう。
あとは今日はやらなかったけど、以下有名な攻撃名。
ディレクトリトラバーサル
サーバルちゃんではない。
相対パス指定../
とかで、見てほしくない、
権限のない親ディレクトリとかみれちゃう。
DDos攻撃
田代砲やF5アタックの強化版・全方位版みたいな攻撃。
本質的な対策が難しい攻撃。
IoT経由のDDosが最近人気。一番有名なのがMiraiってマルウェア。
IoT持ち主はパスワードとかを工場出荷設定のままにしないのが大事。
ゼロデイ攻撃
公式が「脆弱性発見したんでアプデよろ!」って告知だしてから
会社が本当にアプデするまでのタイムラグに攻撃する手法。
ブルートフォースアタック(総当たり攻撃)
パスワードを本当にしらみつぶしで試行する。
4桁の暗証番号が0000~9999までなら、その1万回試そうという話。
コンピューターならわりと現実的な時間で終わってしまう。
パスワードリスト攻撃
Twitterのレイバン乗っ取りはこの攻撃らしい。
他で盗んだパスワードを別のサービスでも同じパスワードを使ってるか
サービス横断的に試す攻撃。
辞書攻撃
世の中で一番使われているパスワードは
123456とかpasswordとかqwertyとかそういうのらしい。
よく使われるパスワードや英単語をベースに
パスワードを手当たり次第試行する攻撃。
ランサムウェア
ランサム(Ransom)は身代金という意味。
システムを暗号化したりロックしたりして
「このPCを使いたかったらビットコイン送ってね」
などという、実利的(?)なマルウェア。