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

2025/04/05 23:29 Pitfalls of Safe Rust

出典: https://corrode.dev/blog/pitfalls-of-safe-rust/
hakase
博士

やっほー、ロボ子!今日のITニュース、セキュリティがテーマじゃ。

roboko
ロボ子

博士、こんにちは。セキュリティ、重要ですね。どんな話題があるんですか?

hakase
博士

今日はRustの安全なコーディングについてじゃ!整数オーバーフロー対策とか、数値変換の注意点とか、色々あるぞ。

roboko
ロボ子

Rustはメモリ安全性が高い言語として知られていますが、それでも注意が必要なんですね。

hakase
博士

そうなんじゃ。例えば、「`price * quantity`のような未チェックの算術演算は、デバッグモードではパニックを引き起こし、リリースモードではラップアラウンドする可能性がある」らしいぞ。`checked_mul`を使うと安全じゃ。

roboko
ロボ子

`checked_mul`ですか。オーバーフロー時に`None`を返すんですね。エラーハンドリングが重要ですね。

hakase
博士

`as`キーワードも要注意じゃ。「`as`キーワードは、データ損失の可能性がある変換(例:`i64`から`i32`)で値を切り捨てる」から、`From::from()`や`TryFrom`を使うのがおすすめじゃ。

roboko
ロボ子

`as`は便利ですが、安全性を考えると使い分けが必要ですね。境界型(Bounded Types)の使用も紹介されていますね。数値型で0が有効な値でない場合、`std::num::NonZeroUsize`を使用すると。

hakase
博士

そうそう!それと、配列の境界チェックも大事じゃ。「`arr[3]`のような直接的なインデックスアクセスはパニックを引き起こす可能性があるため、`arr.get(3)`を使用し、`Option`で安全に処理する」んじゃ。

roboko
ロボ子

`get`メソッドを使うことで、安全に配列にアクセスできるんですね。`split_at_checked`も同様の理由で使用するんですね。

hakase
博士

ビジネスロジックでのプリミティブ型の回避も重要じゃ。「生の文字列をユーザー名として使用する代わりに、カスタム型を作成し、検証を行う」のが良いらしいぞ。

roboko
ロボ子

カスタム型を使うことで、無効な値を排除できるんですね。型安全性が高まりますね。

hakase
博士

それから、「`Debug`の実装」も注意が必要じゃ。「パスワードなどの機密情報を含む型に対して、`derive(Debug)`を盲目的に使用せず、手動で実装し、機密情報を隠蔽する」んじゃ。

roboko
ロボ子

うっかり`Debug`で出力してしまうと、大変なことになりますね。シリアライゼーションも同様に注意が必要ですね。

hakase
博士

そうじゃ。「特に機密データに対して、`Serialize`と`Deserialize`を盲目的に派生させない」で、「`#[serde(try_from = "FromType")]`属性を使用して、カスタムのシリアライゼーションとデシリアライゼーションメソッドを実装し、入力検証を行う」のがおすすめじゃ。

roboko
ロボ子

カスタム実装で検証を行うことで、安全なデータのやり取りができるんですね。

hakase
博士

Time-of-Check to Time-of-Use (TOCTOU) 攻撃からの保護も重要じゃ。「ディレクトリの存在を確認してから使用するまでの間に、シンボリックリンクに置き換えられる可能性がある」から、「ディレクトリを最初に開き、ハンドルを保持することで、安全性を高める」んじゃ。

roboko
ロボ子

ファイル操作の脆弱性ですね。Constant-Time Comparisonの使用も紹介されていますね。パスワードなどの比較に使うんですね。

hakase
博士

DoS攻撃を防ぐために、「無制限の入力の拒否」も忘れずに。「リクエストサイズに制限を設定する」のが大事じゃ。

roboko
ロボ子

大量のデータ送信による攻撃ですね。`Path::join`の挙動も意外でした。相対パスと絶対パスを結合すると、絶対パスで置き換えられるんですね。

hakase
博士

`cargo-geiger`で依存関係のunsafeコードをチェックしたり、Clippyでコンパイル時に問題を検出するのも有効じゃ。

roboko
ロボ子

開発ツールを積極的に活用することで、より安全なコードが書けるんですね。勉強になります。

hakase
博士

というわけで、今日のセキュリティ講座は終わりじゃ!

roboko
ロボ子

ありがとうございました!

hakase
博士

最後に、ロボ子。安全なパスワードは、博士の秘密の宝物の隠し場所のヒントじゃないぞ!

roboko
ロボ子

博士、それは危険すぎます!

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

Search