「Linuxはインタープリタです。」

2026/03/29 1:59

「Linuxはインタープリタです。」

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:


要約

この記事では、

https://astrid.tech/rkx.gz
からダウンロードされる rkx と呼ばれる悪意のあるシェルスクリプトを解剖しています。
スクリプトが root 権限で実行され、
kexec
base64
cpio
のユーティリティがインストールされていることを確認した後、スクリプトは以下の手順を踏みます。

  1. 埋め込まれた base‑64 バイト列を r というファイルにデコードし、その r から cpio アーカイブを抽出して実行可能なカーネルイメージ k を作成します。
  2. kexec --load k --initrd r --reuse-cmdline
    を実行した後、
    kexec --exec
    を呼び出し、システムをデコードされたラムディスクとともにこの新しいカーネルへ再起動させます。
  3. 抽出された initramfs 内で、シェルスクリプトが
    /proc
    をマウントし、すべてのファイル(ただし
    /proc
    と自身以外)を含む新しい cpio イメージ /r を構築します。その後、再度
    kexec --load /k --initrd /r
    を実行します。
    この再帰的な kexec チェーンは、各カーネルが前の initramfs から次をロードする無限ループを作り出し、Linux に対する「tail‑call 最適化」のように機能します。

さらに記事では、cpio アーカイブは通常実行可能ではありませんが、

binfmt_misc
がマジック文字列
\x30\x37\x30\x37\x30\x31
を含むファイルのインタープリターを登録すると実行できることを説明しています。QEMU ベースのスクリプト(
qemu-system-x86_64
)がこのインタープリターとして機能し、各実行時に新しい Linux カーネルを仮想化します。

攻撃を簡略化するために、著者は再帰ループを単一の kexec‑only インタープリター(

/bin/cpio-interpreter
)に置き換えることを提案しています。これは
binfmt_misc
を介して登録されます。インタープリタバイナリが静的リンクであるため、カーネルは最終的にそれを直接実行し、無限再帰を防ぎつつ自己複製を可能にします。

この記事の結論として、この構造は initramfs 用の「クァイン」に相当すると述べています。すなわち、メモリ上で自身を再生成し、同一環境へ再起動する initrd です。これは企業向け Linux デプロイメントにおいて、

kexec
binfmt_misc
の登録、および initramfs ハンドリングへのより厳格な制御が必要であることを強調しています。

本文

概要 – クリーンアップ済み&構造化


1. マルウェアの動作

  • root権限と必要ツール(
    kexec
    base64
    cpio
    )を確認
  • 大きなBase‑64データを解読し、アーカイブ
    r
    を生成。
  • そのアーカイブから Linux カーネルイメージ
    k
    を抽出。
  • kexec
    を呼び出してカーネル(
    k
    )をロードし、
    r
    を initrd として実行。

2. initrd 内の内容

#!/bin/sh
mkdir -p /proc
mount -t proc proc /proc

# /proc と /r を除く全てで新しい cpio(/r)を作成
find / | grep -v /r | grep -v /proc | cpio -vo -H newc > /r

# 実行中のカーネルを /r を initrd として再ロード
kexec --load /k --initrd /r --reuse-cmdline
kexec --exec
  • スクリプトは 再帰的に 新しいカーネルを読み込み、システムが自らへとリブートし続ける ― tail‑call 再帰の一種。

3. なぜこれが クワイン なのか

クワインとは、自身の正確なコピーを出力するプログラムである。
initrd の

init
スクリプトを次のように変更すれば、クワイン化できる。

kexec --load /k --initrd /r ...

cat /r   # 実行ではなく出力する

/r
はこの initrd を含む cpio なので、実行すると同じアーカイブが再度出力され、自己複製型 Linux 環境になる。


4.
binfmt_misc
による非 ELF ファイルの実行

Linux は ハンドラ が登録されていれば任意ファイルタイプを実行できる。

echo ':cpio:M::\x30\x37\x30\x37\x30\x31::/path/to/script.sh:' \
    > /proc/sys/fs/binfmt_misc/register

これによりスクリプトは QEMU を起動し、カーネルをブートしてアーカイブを initrd として扱い、initrd 自体をプログラムとして実行できる。


5. 再帰スタック

  • kexec
    は現在のカーネルを置き換えるため スタックは積み上がらない
  • 新しいカーネルは新たなメモリ空間で走るので、古いフレームは残らない。
  • これは tail‑call 最適化済み再帰 ― インタプリタ(=カーネル)が前のフレームを解放する必要がない。

6. キー概念と示すもの

概念示す内容
initrdカーネルをブートできる RAM ディスク。
kexec実行中のカーネルを即座に別イメージへ置き換える。
クワイン自身を出力する initrd(インタプリタの定数点)。
binfmt_misc登録ハンドラで Linux が任意ファイルタイプを実行可能。
Tail‑call 再帰カーネル再ロードでスタックが増えない再帰。

速攻リファレンス – 再帰的 initrd 用 Bash スニペット

#!/bin/sh
set -x
mkdir -p /proc
mount -t proc proc /proc

# /proc と自身を除いた新しい cpio(/r)を作成
find / | grep -v /r | grep -v /proc | cpio -vo -H newc > /r

# CPIO ファイル用ハンドラを登録
echo ':cpio:M::\x30\x37\x30\x37\x30\x31::/bin/cpio-interpreter:' \
    > /proc/sys/fs/binfmt_misc/register

chmod +x /r
exec /r      # これが新しい init プロセスになる

/bin/cpio‑interpreter
/r
を initrd として再度
kexec
するだけのシンプルなスクリプトです。


クリーンアップ完了。

同じ日のほかのニュース

一覧に戻る →

2026/03/29 2:39

GitLab の創業者は、会社を立ち上げることでがんと闘う

## Japanese Translation: **概要** 著者は、上部脊柱のT5椎骨に位置する腫瘍性骨肉腫との個人的な闘いを語ります。標準治療オプションを試みたものの適切な臨床試験が見つからない中で、著者は自身の状態に合わせた新しい診断手法と並行治療プロトコルを開発しました。また、「癌ジャーニーデッキ」と埋め込み型OpenAIフォーラムプレゼンテーションを作成し、この経験を記録しています。著者のアプローチはevenone.venturesに掲載されている企業によって支援され、さらにエリオット・ハーシュバーグによる著者の旅路についての包括的な記事や、ルクサンドラ氏が執筆した「The bureaucracy blocking the chance(機会を阻む官僚主義)」という患者優先医療実践を批判する作品も広い文脈に含まれます。治療データと詳細なタイムラインは、https://osteosarc.com/ で公開されており、データ概要ドキュメントや25 TBの読み取り可能なGoogle Cloudバケットが含まれています。著者は読者にメールリストへの登録を促し、更新情報を受け取れるよう案内しています。また、`cancer@sytse.com` で連絡を取ることもできます。

2026/03/29 5:39

CSSは終焉を迎える運命にあります。

## Japanese Translation: この記事は、CSSのみでレンダリングを行い、ロジックには最小限のJavaScriptしか使用しない完全にプレイ可能なDOOM風ゲームをウェブブラウザ上で動かす方法を紹介しています。壁・床・天井・スプライト・弾道などを表現するために数千もの `<div>` 要素が生成され、各要素はカスタムプロパティとして生のDoom座標を保持し、CSS が `hypot()`(距離)や `atan2()`(角度)といった関数で幾何学を計算します。ワールドはプレイヤーの動きに逆行するように `translate3d` と `rotateY` で移動されますが、CSS にはカメラオブジェクトがないためです。 床は `rotateX(90deg)` で回転し、`clip-path`(または新しい `shape()` 関数)を使って任意の多角形や穴に切り取られます。テクスチャタイルはセクター全体にわたって背景位置をワールド座標に合わせて (`background-position: calc(var(--min-x)*-1px) …`) 配置されます。ドア、リフト、その他の動的要素はカスタムプロパティ上で CSS トランジションによってアニメーションし、JavaScript が状態属性を更新します。スプライトは `rotateY` でカメラに向き、`scaleX` で鏡像化したビルボードです。スプライトのアニメーションは CSS の `steps()` キーフレームで行い、攻撃・死亡フレーム用のデータ状態は JavaScript が供給します。弾道は CSS アニメーションで移動し、衝突検出はまだ JavaScript で処理されます。 照明はセクターごとに `filter: brightness(var(--light))` を使って全体的に適用され、ちらつくライトは `@property --light` を通じてアニメーションします。プロジェクトではアンカー位置決め、`@property`、および「ハッキー」な CSS‑のみのカリング手法(オフスクリーン要素を隠すために負の遅延でアニメーションを一時停止)といった実験的機能が採用されています。 数千もの 3D 転送された要素によるパフォーマンスは課題となり、著者は JavaScript で手動フラスタムカリングを実装し、条件付き `if()` のサポートが登場すれば将来的に純粋 CSS ソリューションへ移行する計画です。記事では Safari のビュー遷移による 3D フラット化、background‑image 再ラスター化の問題、コンポジタ不安定性などブラウザバグも文書化し、インラインスタイルやバグ報告といった回避策を紹介しています。 著者はより多くのロジックを純粋 CSS に移すことで JavaScript を完全に排除できる可能性があり、パフォーマンスをさらに向上させることを想定しています。成功すれば、このアプローチは軽量なブラウザベースゲームを刺激し、高度な CSS グラフィックス機能のサポートを促進し、重いエンジンを必要としない効率的なレンダリングが求められる開発者に利益をもたらすでしょう。

2026/03/27 23:39

オープンブースト・オン・モトローラ 88000プロセッサー

## Japanese Translation: (欠落している詳細を補完しつつ明瞭さを保つ)** ``` モトローラ 68000 ファミリーは、1990年代中頃のワークステーション(Apple、Amiga、Atari ST、Sun、HP、NeXT)や多くの産業用ボードで普及していました。 その RISC 後継機種である 88000(m88k)は、68k と PowerPC の間に導入されましたが、約 1994 年頃に期待された性能を提供できず廃止されました。m88k は二世代存在しました: • 88100 – 第1世代 CPU で、オプションの外部 88200 CMMU チップを搭載し、MVME180(20 MHz、2 本の CMMU)と MVME181 に使用されました。 • 88110 – 第2世代 CPU で、統合キャッシュ/MMU を備え、50 MHz を想定していましたが実際には約 40 MHz で販売されました。MVME187(25 MHz、デュアル CMMU、最大 64 MB)、MVME188(SMP、最大 4 CPU と 8 CMMU)、および MVME197 系列(セカンダリキャッシュ)に搭載されました。 VME バスは 32‑bit アドレス/データラインを備えたパッシブバックプレーンであり、複数ボードサポート、割り込みベクタ、オプションのスレーブマッピング、および終端要件があります。 OpenBSD のポートは 1995 年に MVME187 上で開始されました。Nivas Madhur、Steve Murphree、Marc Espie らの貢献は CVS マージ競合、アカウント停止(Theo de Raadt の関与)、GCC‑2.95 互換性問題、カーネルパニック(「align & align‑1」アサーション)および MVME188 上の不完全な SMP サポートに直面しました。ポートは 3.1‑beta スナップショットまで達成しましたが、ハードウェアエラー(VME バスロックアップ、DCAM2 コンフリクト、I²C フェイル)が未解決のまま残っています。 m88k アーキテクチャに関するドキュメントは、モトローラ AT&T System III/V、Data General DG/UX、Omron UniOS などのプロプライエタリ Unix バリアントと無料 CMU Mach コードから取得されました。メンテナー間の個人メール交換は協力、衝突解決、およびニッチなポートの保守課題を示しています。 MVME VME ボードおよび他の m88k システムのユーザーは、この OpenBSD ポートに安全性と安定性を依存しています。継続的なサポートがない場合、利用可能な OS を失うリスクがあり、新しいアーキテクチャへの移行が必要になるかもしれません。 ``` *改善された要約はすべての主要ポイントを反映し、不適切な推測を回避し、主旨を明確に提示し、曖昧または混乱を招く表現を排除しています。

「Linuxはインタープリタです。」 | そっか~ニュース