目次
1. タイミング攻撃
パスワードハッシュの計算を行う場合、定数時間比較を行う必要があるがそれを行っていなかったためウラジオストクからの攻撃でAdminを乗っ取られた。
対策としてサイドチャネル攻撃に強いargon2を導入した。
from argon2 import PasswordHasher
ph = PasswordHasher()
await asyncio.to_thread(ph.verify, password_hash, password)2. メルセンヌツイスタのシード予測
OTPの生成には絶対にRandomモジュールを使用してはいけない。なぜなら623回連続でOTP発行すればシードを予測できるからだ。
そのため、secretモジュールを代わりに使用する必要がある。
3. MITM攻撃
空港でフリーWi-Fiに繋いだ際に、TLSを用いて通信しているはずなのに証明書エラーが出たことがあった。これはほぼ確でARPスプーフィングによるMITM攻撃のサインである。幸いWIKIぺディアでネタニヤフ首相の経歴を見ていただけなので助かった。
KaliLinuxを使用すれば一般人でも簡単にARPスプーフをできてしまうので、空港ではWIFIにつながないことにした。
4. E -DoS
別名Denial-of-Wallet攻撃とも呼ばれる。OpenAIやCloud vision等の従量課金制のAPIを内部で呼び出すエンドポイントを保護していない場合、これを特定された瞬間不用意なアクセスが集中することがある。悪意のある攻撃者は、APIを呼び出しまくって大量に課金させてやろうとしているのである。
よって、このようなエンドポイントにはグローバルなレートリミットを設けるか、エンドポイント自体を認証で保護する必要がある。
6. Alg-none攻撃
JWTのヘッダとペイロードはBase64エンコードされているため用意に情報を復元することができる。これ自体は問題ないが、トークンが改竄されていないことを証明するために、JWTの末尾には署名がついている。バックエンドでこの署名を検証する際に、alg=Noneとしてしまうと好きな権限の好きなユーザーとして認証を通過してしまうことができ、大変危険である。
const jwt = require('jsonwebtoken')
const payload = {
name: "alice",
admin: true
}
const token = jwt.sign(payload, null, {algorithm: 'none'})7. 東京ガス iネット
俺が人生で初めてインターンを応募した企業。
メールで「お席を用意できませんでした」と来たので、自前の座席を持ってインターンに参加しようとさえした覚えがある。

