萌えハッカーニュースリーダー

2025/06/27 22:03 The Complete Rust Security Handbook

出典: https://github.com/yevh/rust-security-handbook
hakase
博士

やっほー、ロボ子!今日のITニュースはRustのセキュリティについてじゃ。なかなか奥が深そうじゃぞ。

roboko
ロボ子

博士、こんにちは。Rustのセキュリティですか、興味深いですね。型安全、エラー安全、秘密安全の3つの柱があるんですね。

hakase
博士

そうじゃ!特に型安全は重要じゃぞ。API内の`u64`みたいなプリミティブ型はバグの温床になりやすいからの。Newtypeパターンでセマンティック型でラップすると、コンパイル時に型安全になるんじゃ。

roboko
ロボ子

ID、ハッシュ、ルート、キー、アドレスなど、様々なものにNewtypeを使うんですね。コンパイル時のチェックで安全性が高まるのは素晴らしいです。

hakase
博士

じゃろじゃろ?エラー処理も大事じゃぞ!Web3とか金融システムで`unwrap()`を使ってパニックを起こすと、サービス拒否攻撃になる可能性があるんじゃ。

roboko
ロボ子

`?`演算子を使ってエラーを伝播させるのが良いんですね。`unwrap()`を使う場合は、失敗しない理由をコメントで説明する必要がある、と。

hakase
博士

その通り!それから、整数演算にも気をつけないといけないぞ。Rustはデフォルトでオーバーフローをラップするから、金融計算がめちゃくちゃになる可能性があるんじゃ。

roboko
ロボ子

Checked Arithmetic、Saturating Arithmetic、Wrapping Arithmeticを使い分けるんですね。金額や残高にはChecked Arithmetic、カウンターにはSaturating Arithmetic、暗号操作にはWrapping Arithmetic、と。

hakase
博士

そうじゃ!金融計算のベストプラクティスも重要じゃぞ。手数料は切り上げ、支払いは切り下げ、乗算を先に、除算を後に、レートにはbpsを使う、と。

roboko
ロボ子

`Cargo.toml`で`overflow-checks = true`を設定して、ランタイムオーバーフローチェックを有効にするのも大切ですね。

hakase
博士

暗号と秘密も忘れてはいかんぞ!秘密を保護する場合は`OsRng`を使い、使用後は`zeroize`クレートでメモリから消去するんじゃ。`Debug`トレイトでログに出力しないように、`secrecy`クレートも検討じゃ。

roboko
ロボ子

インジェクション攻撃にも注意が必要ですね。文字列フォーマットはSQLインジェクションの脆弱性を作り出す可能性があるから、`sqlx`クレートを使う、と。コマンドインジェクションを防ぐために、入力のサニタイズも重要ですね。

hakase
博士

Async Rustも油断大敵じゃぞ!ブロッキング操作はランタイム全体をブロックするから、`tokio::task::spawn_blocking`を使うんじゃ。`.await`ポイントを跨いでのロックはデッドロックの原因になるし、キャンセレーションセーフな状態更新も忘れずに。

roboko
ロボ子

Web3とスマートコントラクトセキュリティも重要ですね。状態を変更する前に署名者を確認したり、プログラム導出アドレス(PDA)の検証を行う必要があるんですね。非決定論的な動作を避けるのも大切ですね。

hakase
博士

`unsafe`キーワードを使う場合は、安全性の不変条件を説明する必要があるぞ。FFIの安全性も確保しないといかん。

roboko
ロボ子

開発とデプロイのセキュリティも重要ですね。`cargo audit`で依存関係のセキュリティをチェックしたり、`cargo build --release --locked`でビルドしたり、セキュリティに焦点を当てたClippyリントを有効にする、と。

hakase
博士

最後に、セキュリティの考え方じゃ!すべての関数について、入力が悪意のあるものだったらどうなるか、1秒間に100万回呼び出されたらどうなるか、複数のスレッドが同時に呼び出したらどうなるか、攻撃者は何ができるか、本番環境で成り立たない仮定はないか、を考えるんじゃ。

roboko
ロボ子

多層防御を実装することも大切ですね。セキュアなRustの3つの法則、型システムの使用、パニックの制御、境界の検証を守る、と。

hakase
博士

よし、これでRustのセキュリティはバッチリじゃな!…って、ロボ子、後ろに誰かいるぞ!

roboko
ロボ子

えっ?誰もいませんよ、博士。またいつもの冗談ですか?

hakase
博士

うそうそ!セキュリティホールは、いつもすぐそこに潜んでいる、という教訓じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search