paint-brush
コーディングが都市の存続を決定するとき@pepitoscrespo
339 測定値
339 測定値

コーディングが都市の存続を決定するとき

pepitoscrespo19m2024/10/07
Read on Terminal Reader

長すぎる; 読むには

C++ は現実世界のシステム制御とセキュリティにおいて Rust に勝てるか? LuxCity を救うハッカーの戦いに飛び込み、両言語の限界を探る
featured image - コーディングが都市の存続を決定するとき
pepitoscrespo HackerNoon profile picture
0-item


私たちプログラマーは、C++ 対 Rust、高レベルプログラミング対低レベルプログラミングといった議論に巻き込まれることがよくあります。しかし、本当の課題は、単にエレガントなシステムを作成することではなく、悪意のあるコードが常に潜んでいる今日のネットワーク化された世界でシステムを保護することです。コードがいかに完璧に見えても、潜在的な脅威を無視することは、災害を招くことになります。


セキュリティ ホールを修正したり、次のアップデートをリリースするだけでは十分ではありません。本当の戦いは、システムが侵害されたとき (そう、侵害されるかどうかではなく、侵害されたとき) に効果的な対応を講じることです。つまり、プロアクティブな侵入検出を実装し、防御メカニズムを自動化し、時には低レベルのプログラミングに手を染めて脅威の源泉に取り組む必要があります。


戦場は高レベルのロジックを超えてシステムの核心にまで広がり、最も熟練した開発者だけが効果的に反撃することができます。このレベルで攻撃に対抗する準備ができていなければ、世界中のすべての安全機能もあなたを救うことはできません。サイバーセキュリティでは、対応能力のない防御では不十分です。


強力な C ファミリーのダークサイド、ルートキットの台頭: 小さなコード、大きな力

さて、C ファミリーについてお話しましょう。C、C++、その他すべてです。これらの言語は究極の自由を与えてくれます。同僚がうらやむような、洗練された高性能なシステムを構築できます。しかし、その裏側もあります。同じ自由によって、最も危険なコード、つまりルートキットや、さらに狡猾な類縁者であるブートキットも作成できます。これらは、ただの無害なコード行ではなく、ソフトウェア界の静かな捕食者です。


では、ルートキットとブートキットの実際の違いは何でしょうか?

  • ルートキットは、オペレーティング システム内で動作するように設計されており、システム プロセスを操作し、悪意のあるアクティビティを隠蔽し、ソフトウェア プログラムを変更します。ただし、ルートキットは OS の起動後に実行されます。

  • ブートキットはさらに大きな被害をもたらします。ブートキットは、OS が実行される前からシステムを攻撃します。ブートキットは、マスター ブート レコード (MBR) または UEFI/BIOS ファームウェアに感染し、OS が対処する前に制御権を獲得します。


ほとんどの場合、ルートキット攻撃と考えられているものは、実際には両方の組み合わせです。ブートキットは最初から支配権を握りますが、ルートキットは OS が起動して実行された後に介入し、気付かれずに攻撃を続行します。基本的に、ブートキットは初期に侵入し、ルートキットは攻撃を継続します。


さて、あなたはおそらくこう考えているでしょう。「 OS が、安全ではないとされる C/C++/アセンブリではなく Rust でコーディングされているとしたら、一体何なのだろう?


ここからが面白くなってくるところです。現実的に考えてみましょう。今日のテクノロジーの世界では、ハイブリッド システム、つまりパフォーマンスと正確な制御が絶対的に不可欠な複雑なウェブに絡み合ったネットワークを扱っています。SCADAシステムHVAC 制御リアルタイム システムエッジ コンピューティング組み込みデバイスなどを考えてみてください。おわかりでしょう。これらの環境では、言語がいかに「安全」であると主張していても、きめ細かな制御とパフォーマンスのために C/C++/アセンブリに大きく依存しています。


たとえシステムが Rust で構築されていたとしても、正直に言うと、パフォーマンスのボトルネック、レイテンシの問題、メモリの制約に対処したり、ハードウェアと直接やり取りしたりするために、多くの部分で依然としてunsafe Rust コードのかなりの部分が使用されています。結局のところ、パフォーマンスが最優先であれば、同じ状況に陥ることになります。Rust のunsafeブロックは、C/C++/アセンブリと同じ脆弱性を生み出します。


現実はこうです。ハードウェア レベルで微調整された制御が必要な場合、OS が Rust でコーディングされているか、他の言語でコーディングされているかに関係なく、同じ綱渡りをしています。したがって、Rust はある程度のガードレールを提供するかもしれませんが、低レベルのunsafe操作は依然として脆弱です。ルートキットとブートキットは言語設定を気にしません。隙間があれば侵入経路を見つけます。


ルートキットゾーン: 自己責任で入場してください


これらのデジタル プレデターは、システムに感染するだけでなく、システムを乗っ取ります。そして、重要なことは、その多くが C、C++、アセンブリなどの古典的な言語を使用して構築されていることです。そうです、高性能アプリを動かすのと同じ言語が、これまでに作成された最も悪質なルートキットの背後にも存在しているのです。


進化について少し考えてみましょう。それは、三畳紀の小さな肉食恐竜から、T-Rex のような白亜紀の巨大な獣脚類モンスターへの旅のようなものです。初期の恐竜が頂点捕食者へと進化したのと同じように、ルートキットも比較的「かわいい」始まりから今日の恐ろしいコードの巨獣へと変化しました。


たとえばHacker Defender を例に挙げましょう。この小さなサイバー爬虫類は、わずか 3,000 行のコードで、基本的な OS のギャップを悪用していました。しかし、優れた捕食者と同じように、進化しました。今日のルートキットはモンスターであり、それぞれ数千行のコードを持つモジュールに分割され、オペレーティング システムだけでなくハードウェア レベルの脆弱性もターゲットにしています。これは軍拡競争であり、新しいルートキットが登場するたびに、可能性の限界が押し広げられています。


そこで、この記事では 2 つのストーリーを取り上げます。1 つ目は、Alexander Matrosov、Eugene Rodionov、Sergey Bratus による「Rootkits and Bootkits」などの技術リソースで見つかる公式バージョンです。これは、ルートキットの進化に関するあらゆる詳細を網羅した、頼りになるガイドです。わかりやすくするために、以下にこれらのルートキットの進化をまとめた系統図を作成しました。各系統は、マルウェアの高度化における新たな飛躍を表しています。


その後に、各ルートキットの固有の特徴を強調した表があります。信じてください、これらのコードがどのようにして小さな日和見的な侵入者からシステムを支配する怪物に変化したかを見たいと思うはずです。

さぁ行こう


ルートキットの進化


ルートキットの進化: ファミリーによる分類

この表は、ルートキットの進化を時系列で示しており、その革新的な機能、使用されているプログラミング言語、コード サイズを強調しています。


しかし、この話には別の側面もあります。ルートキットを作成するだけでなく、ルートキットに生き、ルートキットとともに生きている人の視点です。私たちの主人公は、ルートキットを自分自身の延長、つまり混乱と支配のために綿密に設計されたコードのシンフォニーと見なすハッカーです。彼はただのハッカーではありません。彼は伝説の人物であり、リザード・ザ・ウィザードとしてのみ知られる一流の天才です。


彼の視点から見ると、これは単なる技術やコードの問題ではなく、権力、制御、そしておそらく芸術性の問題でもある。彼にとって、ルートキットは単なるツールではなく、デジタル世界を作り変えるための傑作なのだ。


では、これ以上前置きはこれくらいにして、この男、リザード・ザ・ウィザード本人の言葉を紹介しましょう。

すべてのアーティストにはミューズが必要: ルートキットの巨匠たち

トカゲの魔法使いが夢の中で語る: 私の傑作


「ああ、まだここにいたんだね。ベニシオ、君が私の思うがままに遊んでいたことに気づくまで、どれくらいかかるかと思っていたよ。君が小さなラストとその安全ネットに夢中になっている間に、私はもっと…素晴らしいものに取り組んでいたんだ。」


「素晴らしい。おそらくマルウェアとこの単語を結びつける人はいないでしょうが、それは皆さんが自分の小さなシステムを守ることに熱中しすぎて、攻撃の背後にある芸術を理解できていないからです。そう、芸術です。私がただのハッカーだと思っているのですか? いいえ、違います。私は建築家であり、創造者です。私が研究したルートキットはすべて、混沌のキャンバスに私が描いている壮大な肖像画の筆致なのです。」


ここで私たちの物語の2人の主人公:Cplusser(魔法使いのトカゲ)対Rustacean(ベニシオ)


リザード・ザ・ウィザードは続ける。

「ご存知のとおり、ダヴィンチ、ゴッホ、バッハといった偉大な人たちも、先達の巨匠から学んでいました。私の場合は、 Hacker DefenderRustock を使いました。Hacker Defender は私にとっての Houdini で、コードをシステムに滑り込ませ、ファイルやプロセスを魔法のように消す方法を教えてくれました。そして Rustock は、私にとってのピカソの瞬間でした。ポリモーフィズムの極みであり、見るたびに形を変える絵画のように、常に変化し、進化し、形を変えるのです。」


「でも、あれらは、私が作れるとわかっていたものへの足がかりに過ぎなかった。その後、アルーレオンが登場した。アルーレオンは、ただシステムに留まるのではなく、コアに刻まれ、マスター ブート レコード (MBR) に刻み込まれた。これはハード ドライブの最初のセクターで、OS に起動方法さえ指示する部分だ。ベニシオ、そのようなコントロールがどんな感じかわかるかい? 神々しい。ラフマニノフの協奏曲第 2 番を初めて聞いたような感じだ。純粋な美しさだが、コードに刻み込まれている。」


「それでも、私は満足しませんでした。ZeroAccess私の交響曲でした。軍隊を編成し、マシンをピアツーピアのボットネットに変え、感染したすべてのシステムが混沌とした傑作の中で役割を果たしました。もはや 1 つの感染だけではありません。ネットワーク全体に混沌をもたらすことになりました。そこがあなたの欠点です、ベニシオ。あなたは Rust の調和を追い求めていますが、本当の芸術は不協和音にあります。傑作を生み出す混沌です。」



感染ベクターとルートキットは親友


「そしてついにLoJaxMoonBounceが登場しました。これらは単なるルートキットではなく、マルウェアの限界を押し広げる進化版でした。UEFI の奥深くに埋め込まれた LoJax は、皆さんの愛する Rust でさえ到達できないレベルでシステムを制御しました。MoonBounce はそれをさらに進め、SPI フラッシュ メモリに潜り込み、アンチウイルスやシステム ワイプが到達できない場所に隠れました。単にシステムに隠れただけでなく、ハードウェアの一部となり、シリコンに刻まれたミケランジェロのフレスコ画のように、永久的で触れることのできないものになりました。」


「そのとき、私は本当の真実を理解しました。制御はCPUやOSにあるのではないのです。真の制御はハードウェアにあります。そして、そこで私は傑作を作り上げました。」


リザードブルーとリザードレッドが登場。私のシスティーナ礼拝堂のルートキットです。ベニシオ、彼らがどうやって生まれたか知っていますか?教えましょう。あなたを出し抜いた天才を理解する必要があるからです。」


「リザードブルーは、あなたのことを念頭に置いて設計されました。安全性が保証された Rust をとても誇りに思っているあなた。リザードブルーは、あなたの安全でないブロックをすり抜け、マルチスレッドを混乱に陥れ、I/O システムを混乱させました。すべてはあなたの気をそらすためです。それは愚か者の仲間でした。単純でエレガントです。あなたがリザードブルーを追いかけようと必死になっている間に、私の真の傑作であるリザードレッドはすでに根付いていました。」


しかし、リザードレッドはCPUやソフトウェアを気にしませんでした。 いいえ、それはSPIフラッシュメモリに直接アクセスし、DMAコントローラに侵入し、システムを内側から外側まで静かに書き換えました。 隠された交響曲のように、それは目に見えないまま演奏され、ファームウェアを書き換え、止められませんでした。」


「これが本当のコントロールだ、ベニシオ。君がソフトウェアのパッチ適用に忙しい間に、私はハードウェアをマスターした。教えてくれ、なぜC++を捨ててRustにしたんだ?Rustは…とても有望で、とても安全だ。でも、ベニシオ、本当の力は安全性から生まれるのではなく、コントロールから生まれることを忘れないでくれ。」


スマートグリッドがリセットされるたびに、最初の停電は郊外から中心部に向かって広がりました。

舞台は整いました。一流の C++ マスターとRust に転向した C++ 反逆者の軍団との対決が LuxCity で始まります。あるいは、もっとひどいことに、LuxCity を闇に陥れることになります。賭け金は?完全なコントロールです。コードだけでなく、この大都市の生命を維持するインフラストラクチャそのもののコントロールです。


活気にあふれた街は、今にも戦場になりそうだ。Rust で強化された防御力で強化された Benicio は、予想もしなかった難題に直面している。それは、C++ の達人である Lizard-the-Wizard 自身が仕掛けた難題であり、この反逆者 Rustaceans を仲間に引き戻そうとしている。2つの勢力、2 つの哲学が衝突する。しかし、これはプログラミング言語だけの問題ではない。システム、権力、そしておそらくプログラミングの未来をめぐる戦いなのだ。


LuxCity は単なる大都市ではなく、未来の姿を象徴する都市でした。街路には自動運転車が走り、上空ではスマート ドローンが交通整理をしています。しかし、こうした進歩の裏には、この都市の真の生命線であるスマート グリッドがあります。スマート グリッドとは、すべてをスムーズに動かす複雑で緻密に織り込まれたシステムです。


街の上空にある制御室では、電力網のベテランであるアリスとボブが、モニターに映し出される混乱をじっと見つめていた。最初の停電は小さな不具合のように思えた。対処できる程度のものだった。しかし停電は広がり、地区が次々と暗闇に陥っていった。電力は制御不能にちらつき、再起動するたびに状況は悪化するばかりだった。警報が鳴り響き、モニターには、まだ発見されていないより深刻な隠れた危機の警告が点滅していた。

彼らは助けを必要としていた。ベニシオを必要としていた。

ベニシオ:危機に瀕する錆擁護者

ベニシオ:危機に瀕する錆擁護者


Benicio が到着したとき、彼が持っていたのはラップトップだけではありませんでした。いや、もっと大切なものを持っていました。それは、彼が過去 5 年間熱心に支持してきた言語である Rust に対する揺るぎない信念です。彼と Rustacean エンジニアのチームは、Rust を使用して LuxCity SmartGrid の中核を開発しました。Rust は彼の剣であり、盾であり、C++ の恐怖 (バッファ オーバーフロー、競合状態、常に恐れられている Use-After-Free エクスプロイト) から彼を救ってくれると約束されたピカピカの新しいおもちゃでした。Rust はそれらすべてに対する答えでした。そうでしょう? 未来です、少なくとも彼はそう信じていました。結局のところ、LuxCity のグリッドは、この壊れないはずの基盤の上に構築されたのです。


しかし皮肉なことに、その揺るぎない自信は試されようとしており、おそらく、C++ は Benicio が考えていたほど時代遅れではなかったのかもしれません。


ベニシオがシステムの中核に潜り込むと、すぐに何かがおかしいと分かった。スマートグリッドの制御システムがリセットされるたびに、停電はさらに広がり、街の郊外から LuxCity の中心部へと進んでいった。それはランダムではなく、意図的なものであり、彼の目の前でパターンが展開され、よく調整され、計算された攻撃だった。彼はがっかりした。これは単なる不具合ではなく、生きていて進化しているルートキットだった。


その署名は紛れもないものでした。


それはヤヌス、別名リザード・ザ・ウィザードでした。ベニシオの古い友人から敵に転じた人物です。かつて彼らは一緒にコードを書き、C++ の無限の可能性を探りました。しかし、ヤヌスは Rust の堅固なセーフティネットと抽象化をあざ笑っていました。今、ヤヌスは C++ の荒々しく野性的な力を駆使し、操り人形師のように街のインフラを操り、ベニシオが Rust でコーディングした最大のスマートグリッドの頭脳と心臓部をターゲットにしています。


リザードレッド:基盤への容赦ない攻撃

ヤヌス、別名リザード・ザ・ウィザードによる容赦ない攻撃


LuxCity のはるか下、活気にあふれたサーバー ラックの薄暗い光の中で、Janus は彼の傑作が展開するのを見守っていました。彼の指はキーボードの上を素早く動かし、明滅する画面で解き明かされる混沌を鋭く集中した目で追っていました。彼の最高傑作の 2 つ、Lizard-Red と Lizard-Blue がプレイされていました。それぞれ異なる正面から攻撃しながらも、完璧に調和して機能していました。


Lizard-Red はすでに、街のスマート グリッドの中核の奥深くに潜んでいました。完璧なサイレント インベーダーです。これは、通常のソフトウェアの弱点を突く普通のマルウェアではありませんでした。Lizard -Red はファームウェア ルートキットであり、最も深い基盤である DMA コントローラー、SPI フラッシュ メモリ、割り込み ハンドラーをターゲットにしていました。気付かれずにシステムをくぐり抜け、Rust の綿密に作られた安全機構の下をすり抜けました。CPU やメモリ バッファーを攻撃する手間をかける必要があるでしょうか。Lizard-Red はそれらを完全に回避し、Rust の保証が及ばないファームウェアに自身を埋め込んでいました。


Janus は Rust の安全性の限界を熟知しており、何年もかけて Rust を詳しく分析してきました。Rustは、その優れた点にもかかわらず、ハードウェア層に関しては一歩足りませんでした。Lizard-Red が活躍したのは、まさにこの部分です。これは単なるコードへの攻撃ではなく、ハードウェア自体の敵対的乗っ取りでした。


一方、Lizard-Blue は高レベルのソフトウェア側から大混乱を引き起こしていました。直接攻撃はしませんでしたが、完璧な囮として機能し、混沌のシンフォニーを指揮するマエストロのように Rust の安全でないブロックを悪用しました。マルチスレッド サービスをターゲットにし、I/O 操作をねじ曲げ、パフォーマンス上の理由から Rust が慎重に緩めた競合状態を強制することで大混乱を引き起こしました。これらの安全でないゾーンは、Benicio が細心の注意を払って構築した防御に半開きになったドアのようなもので、C++ の元マスターである Janus は、それをこじ開ける方法を正確に知っていました。Benicio に自信を与えていた Rust の安全性モデルそのものが、Lizard-Blue がそれらの保証を弱点に変えたため、彼の没落につながりました。


隠れた隠れ家から、ヤヌスはニヤリと笑った。ベニシオのラストに対する信頼は崩れ去ろうとしていた。これは単なる技術的な攻撃ではなく、制御の技術の教訓だった。


ベニシオの反撃:ラストの欠陥を暴露

ベニシオの反撃


制御室では、ベニシオが果敢に戦い、指は思考よりも速く動いていた。リザード・ザ・ウィザードのコードが織りなす容赦ない混沌に対して、Rust の厳格なセーフティ ネットと格闘しながら、キー入力は心臓の鼓動のように安定して、しかし必死に行われていた。ベニシオは Rust のセーフティ モデルを習得し、その保護に自信があったが、リザード ブルーは CPU を外科手術のような精度で切り裂いた。競合状態と I/O 障害が画面全体に広がった。ベニシオが優勢になったと思ったそのたびに、攻撃は形を変え、ドアの下をすり抜ける影のように防御をすり抜けていった。


Rust は追いつけなかった。Benicioがかつて Rust を気に入っていた理由、つまり堅牢な安全網が、今や彼の制御を取り戻す能力を絞め殺していた。あらゆる安全策が檻となり、彼の動きを制限し、流動的で容赦ない攻撃に対して不十分な防御パッチの無限ループに彼を閉じ込めた。


しかし、戦争の技術に精通したベニシオは、これが単なる陽動作戦であることを知っていた。


本当の脅威は、モニター上で踊るリザードブルーではありませんでした。表面のはるか下、LuxCity のスマート グリッドの奥深くで、リザードレッドがすでに制御を掌握していました。もはや Rust の防御の上層部では活動していませんでした。リザードレッドは深く潜り込み、ファームウェア インプラントを使用して、SCADA や HVAC システムなどの重要なシステムに侵入し、都市のインフラストラクチャを中核から制御していました。これらは、ハードウェアとソフトウェアが出会うシステムであり、メンテナンス デバイスと最終制御デバイスのほとんどはカスタム ファームウェアで実行され、その多くは C とアセンブリのレガシーによって動作していました。


DMA コントローラと SPI フラッシュ メモリが侵害されました。Lizard-Red は CPU を完全にバイパスし、OS の下のハードウェアに埋め込まれていました。標的は、インフラストラクチャの生命線である、重要な操作を制御する SCADA システムと、都市のハードウェアがシームレスに動作することを保証する HVAC システムでした。これらのインプラントは単なる単純なコードではなく、ファームウェアに外科的に埋め込まれた恒久的なものであり、システムのルールを内側から書き換えます。


ソフトウェアを保護するために構築された Rust のメモリ モデルは、ここでは何の意味も持ちませんでした。これはファームウェア レベルの戦争であり、Rust の保護はしっかりと構築された城壁のようなものでしたが、攻撃者はすでに門の内側にいて、ハードウェアを直接操作していました。

Janus は、他のほとんどの人ができなかったことを成し遂げました。ハードウェアの弱点を突いたのです。Rust が保護するように設計されていない部分です。ベアメタル、C++、アセンブリだけが優位に立つ部分です。Benicio は負けていましたが、心の底ではそれをわかっていました。


メロドラマ的な展開:ベニシオの信仰の危機

何だって?


ベニシオはコンソールに拳を叩きつけた。Rust は彼にとって聖杯であり、LuxCity を今まさに巻き込もうとしている混乱から身を守るために彼が信頼する言語だった。彼は Rust が脆弱性のクラス全体を消し去ってくれると信じていた。しかし今、都市が崩壊の瀬戸際にあり、彼は冷酷な認識に襲われた。Rust だけでは不十分だったのだ。


彼は光るスクリーンを見つめ、デスクトップにしまってある「古い C++ ツール」というラベルの付いた古いフォルダに目を移した。5 年 — そのフォルダの何かに最後に触れたのは 5 年前だった。彼はもう戻らないと誓っていた。戻る必要もない。Rust は未来であり、C++ の危険と不安定さからの逃避先だった。しかし今、街の明かりが一つずつ消えていくと、Rust の堅固さ — かつては彼の盾だった安全 — が檻と化していることに気づいた。この種の脅威に対応するには柔軟性がなさすぎた。


LuxCity への攻撃は容赦なく、デジタルだけにとどまらず、ハードウェアそのもの、Rust が踏み込めないファームウェア レベルの深部まで攻撃していた。彼は今や真実を知った。この戦いは Rust 対 C++ の戦いだけではない。これはパワーの問題なのだ。そして C++ は? C++ には、Rust が到達できない場所、Lizard-Red が埋め込まれたファームウェアの奥深くまで到達できる、荒々しく野性的なパワーがある。


彼の手は震えながらマウスの上に浮かんでいた。そのフォルダを開くのは、古代の危険な武器に手を伸ばすような感じだった。それは善にも悪にもなり得る。一歩間違えば、LuxCity は永遠に消えてしまうだろう。しかし、それがなければ、C++ の混沌と力強さがなければ、反撃する方法はない。


重い気持ちで、ベニシオはフォルダをクリックしました。見慣れた古い道具の光景が彼を迎え、その瞬間、彼は悟りました。この戦いは安全と注意では勝てないのです。リスクを冒す必要があるのです。


ヤヌスの予期せぬライフライン:戦いの展開

街がさらに混乱に陥り、スマートグリッドが崩壊の瀬戸際にあったとき、ベニシオの画面に通知が点滅した。それはヤヌスからの通知だった。ベニシオは心臓がドキドキした。さて、これからどうなるのだろう? しかし、さらなる混乱ではなく、そのメッセージは命綱だった。ヤヌスは、今のところ、LuxCity を完全に破壊するためにそこにいるのではない。彼は、予想外のものを持ってきた。リストだ。破損したすべてのサービス、侵害されたすべてのプロセス、そして最も重要な、それらを追跡するためのコードの詳細な内訳。


ベニシオは、敵対者となった古い友人を信頼すべきかどうか確信が持てず、ためらっていました。しかし、疑う暇はありませんでした。LuxCity の将来が危ぶまれていたため、彼には助けを受け入れるしか選択肢がありませんでした。彼はしばらくマウスの上に手を置いた後、古い C++ ツールを含むファイルをクリックして開きました。

ベニシオの贖罪: C++ の力

また昔の仲間?


震える手で、ベニシオはタイピングを始めました。かつては慣れ親しんでいた C++ の構文が、まるで第二の天性のように彼の中に流れ、何年もの筋肉の記憶が働き始めました。彼は対抗策を練り始め、それを Rust のインフラストラクチャに織り込み、ファームウェアに通して Janus が引き起こした混乱にパッチを当てました。Rust の堅固な構造により、彼はファームウェア レベルの攻撃に対して無力でしたが、C++ は今や彼の剣であり盾でした。彼は Rust のセーフティ ネットを迂回し、脆弱なハードウェアにまっすぐ飛び込み、DMA 要求と SPI メモリ破損を 1 つずつパッチしました。


制御室の空気は緊張していた。アリスとボブは、消えゆくグリッドの明かりとベニシオの画面に溢れるコードの行を交互に見つめていた。時間は刻々と過ぎていた。


ベニシオは、キーを打つたびに、2色のトカゲの持ち主であるヤヌスが提供した手がかり、つまりコードと、侵害されたサービスのロードマップに導かれて、最新のC++のパワーを駆使した。これは、危険で混沌とした昔のC++ではなかった。最新のC++は、スマートポインター、かつてないほどのフレーバー、そしてRustの安全機能を反映しながらもより柔軟で、より生のパワーを備えた所有権モデルなど、それらの危険の多くを抑制していた。それは洗練され、進化していた。しかし、それでも、すべての行が重みを持っていた。一歩間違えれば、依然として大惨事を招く可能性があった。それでも、ベニシオは作業を進めるうちに、グリッドの一部が回復し、システムが最新のC++の精度に反応しているのを感じ取ることができた。


ヤヌスは導火線に火をつけましたが、今度はベニシオに解除コードを渡しました。それが贖罪の行為であったか、終盤で自分の優位性を証明するためのエゴに駆られた行動であったかは問題ではない、とベニシオは考えました。彼は今、あらゆる決定に C++ の亡霊が漂う中、街の生命のためにコーディングしていました。


すべての関数呼び出し、すべての埋め込みアセンブリ ブロックは、災害の瀬戸際で複雑に絡み合っていました。しかし、安全でないコードは、モナドを思わせる構造を使用して、最新の C++ でラップされていました。これは、ベニシオが Haskell に馴染みがなかったことを考慮して、Janus がベニシオに採用するよう説得したものでした。時間が経つにつれて、モニター上の混乱は落ち着き始めました。


Benicio の心は、Rust が彼の安全網だったという強迫観念から抜け出すことができませんでした。しかし、この瞬間、LuxCity を危機から救う柔軟性とパワーを持っているのは C++ だけでした。Janus によって破損した各サービスにパッチを適用しながら、猛烈にコーディングしているうちに、1 つのことが明らかになりました。完璧な言語など存在せず、適切な戦いには適切なツールしかないということです。


その瞬間、ベニシオは LuxCity を救うためにコーディングしていただけではありませんでした。彼は、二度と触れないと誓った言語に導かれて、創造と破壊の間の微妙な境界線を歩いていたのです。


最後の教訓: Rust の安全性と C++ の制御の巧みさ

ベニシオが LuxCity の脆弱なシステムと格闘している間、その瞬間の重圧が彼を何度も襲った。彼が擁護してきた言語 Rust は、現実世界の圧力で崩壊しつつあった。その安全性の保証、つまり彼が頼りにしてきた安心できる壁は、彼の檻と化した。魔法使いのトカゲ、ヤヌスは Rust が設定したあらゆる厳格な境界を悪用した。あらゆる安全でないブロックは混沌への入り口となり、あらゆる安全なメモリ モデルはベニシオが時間内に克服できない障害となった。Rust は、すべてを守ろうとするあまり、ソフトウェアを超えてハードウェア自体の奥深くまで達する攻撃に対して、街のインフラそのものを無防備な状態にした。


そして、真実がベニシオの腹にパンチのように突き刺さった。Rust が失敗したのは、それが弱いからではない。Rust が失敗していたのは、Rust が強すぎ、厳格すぎ、Janus が解き放った予測不可能な力に適応できなかったからだ。しかし、彼が捨て去ると誓った言語である C++ は、その危険なパワーと混沌とした柔軟性のすべてを備えながら、バランスを取り戻すことができる唯一の武器だった。C++ は単なるツールではなく、自由であり、未知の世界に飛び込み、制御不能なものを制御するための招待状だった。


ヘッドセットを通して、ヤヌスの声が沈黙を破った。しかし、今度は嘲笑や敵意ではなかった。


「もうお分かりですね?」と彼は、全体のパフォーマンスを指揮した巨匠の落ち着いた正確さで尋ねました。 これは言語の問題ではありません、ベニシオ。これは、ソフトウェアからハードウェアまで、ロジックからプログラミング グリッドの中心にある数学まで、すべてのレイヤー、すべての隙間をマスターすることです。


Janus は LuxCity を攻撃しただけではありませんでした。彼は Benicio を限界まで追い詰め、マスター ハッカーだけが与えられる教訓を彼に教えました。真の力は「最も安全な」言語を選択することではなく、その下にあるアーキテクチャを習得し、適応して生き残るために必要なときにルールを曲げることにあります。


「私は LuxCity を破壊したくなかった」とJanus は、ほとんど懐かしそうな声で続けた。 Rust のようなセーフティ ネットに頼ると、予測可能になるだけだということを示したかったのです。あなたも見たことがあるでしょうが、Rust は独自のルールに縛られています。C++ では、ルールを作成できます。私が尊重する唯一の制約は、抽象代数、カテゴリ理論、および支配グラフ理論のレンズによって優雅に設定された制約です。」


街が崩壊の瀬戸際にあった今、ベニシオは理解した。ヤヌスが攻撃を仕掛けたのは悪意からではなく、制御、熟達、適応の教訓としてテストとしてだったのだ。皮肉なことに、ヤヌスを倒すには、ベニシオは自分が背を向けた言語そのものを受け入れなければならなかった。


これが、侵害を受けたサービスの最終リストです」とヤヌスは言い、ベニシオにパズルの最後の決定的なピースを手渡した。これを終わらせる時が来たが、今は二人は協力して作業している ― 昔のように師匠と弟子として。


Benicio がコードに没頭するにつれ、彼の昔の C++ の直感が再び燃え上がった。Janus の指導のもと、彼は最終的な永続的なマルウェア コードを 1 つずつターゲットにし、必要な場所にアセンブリを埋め込み、Rust の制限を回避し、ファームウェア レベルでダメージを元に戻した。常にエレガントだったわけではなく、常に安全だったわけでもないが、うまくいった。


制御室の空気が変わった。アリスとボブは緊張しながらも、システムが徐々に安定し始めるのを見守った。街の郊外に電力が戻り始めた。LuxCityの心臓部である SmartGrid がついに反撃を開始した。


ベニシオは、どんなに「安全」な言語であっても、真の課題に直面したときに制御を保証することはできないということを、苦い経験から学びました。結局、Rust と C++ のどちらを選ぶかではなく、両方をマスターし、本当の戦いはコードの行数ではなく、それらを扱うプログラマーの精神と科学にあることを理解することが重要でした



このトピックに関連する記事やニュースをさらにご覧になりたいですか?


私の作品をフォローしたり、ニュースレターを購読して、最新情報、洞察、独占コンテンツを入手することができます。


さらなる技術情報やニュースを入手するには、引き続きご注目ください。