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

Firejailを触ってみよう

 Firejailを触ってみよう

Ubuntu 16.04 LTSリリース記念オフラインミーティング16.06で話した内容です(若干修正あり)。

Toshiharu KUDOH

July 02, 2016
Tweet

More Decks by Toshiharu KUDOH

Other Decks in Technology

Transcript

  1. Firejail を
    触ってみよう
    2016.06.26
    Ubuntu Offline Meeting 16.06
    @GREE, Inc.
    Toshiharu Kudoh

    Vine Linux
    Vine Linux

    View Slide

  2. About Me
     工藤 寿晴 (twitter id: toshi_kd)
    ➢ Project Vine メンバー
    ➔ セキュリティチーム
    ➔ パッケージャー & メンテナー
    • フォント(日本語及び多言語)
    • LXDE
    • デスクトップ GTK+/Qt アプリケーション
    and more..
    Vine Linux
    Vine Linux

    View Slide

  3. Recent Activity
    学術論文を一本発表しました。
    (2016.3)
    ※元来の専攻である歴史学(中国・東北アジア史)の論文です。
    調査はともかく執筆の進捗が悪く、非常に難産でした。
    出来の如何はさておき、アウトプット重要。
    Vine Linux
    Vine Linux

    View Slide

  4. Recent Activity
    転職しました。
    (退職:2016.3、就職:2016.6)
    ※前職同様インフラエンジニアとして
    小さな IT インフラ事業会社@渋谷で働いています。
    採用等興味のある方はお尋ね下さい。
    Vine Linux
    Vine Linux

    View Slide

  5. Recent Activity
    Vine Linux 7 “Ausone”
    (now developing...)
    ※論文執筆もあって長期間活動が低下していました。
    最近徐々に復帰しつつあります。
    リリースに向けて頑張ります。
    Vine Linux
    Vine Linux

    View Slide

  6. Today's Topic
    Firejail
    Vine Linux
    Vine Linux

    View Slide

  7. Introduction
    What is Firejail?
    Vine Linux
    Vine Linux

    View Slide

  8. Introduction
    - 概要 -
    Firejail is a SUID program that reduces the risk of
    security breaches by restricting the running
    environment of untrusted applications using
    Linux namespaces, seccomp-bpf and Linux
    capabilities.
    - Firejail (1) より引用-
    Vine Linux
    Vine Linux

    View Slide

  9. Introduction
    一言で言えば、
    “Linux Kernel の機能を利用した
    サンドボックスプログラム”。
    軽量かつ依存関係も少ない。
    Vine Linux
    Vine Linux

    View Slide

  10. Introduction
    ファーストベータリリース(0.9)の
    公開は 2014.4.15。
    2016.6.26 現在の最新版は 0.9.40。
    (2016.5.29 リリース)
    Vine Linux
    Vine Linux

    View Slide

  11. Introduction
    Ubuntu では、
    15.10 “Wily Werewolf”から
    リポジトリに入っている。
    (0.9.28(15.10)、0.9.38(16.04)が利用可能)
    Vine Linux
    Vine Linux

    View Slide

  12. Introduction
    現状日本での注目度は低い。
    言及は Linux Daily Topics
    (「2016 年 5 月 13 日 ヤバめのアプリはまず"火の檻"で
    ―サンドボックス「Firejail」が X11 に対応へ」)
    がほぼ唯一の模様。
    (他情報源として ArchWiki 日本語版にページがある程度)
    Vine Linux
    Vine Linux

    View Slide

  13. Introduction
    しかしながら今後の可能性を
    秘めたツールと思われるので、
    各種情報を参照しながら
    「少し紹介してみよう」
    というのが今回の主眼。
    Vine Linux
    Vine Linux

    View Slide

  14. Install
    install の方法としては、
    ①ソースからビルド
    ②リポジトリのパッケージを利用
    ③開発元提供のパッケージを利用
    の 3 通り。
    Vine Linux
    Vine Linux

    View Slide

  15. Install
    最も楽なのは②なので、
    端末を展開して
    “sudo apt install firejail”
    を実行すれば、準備完了。
    (カスタムビルドしたい場合は①、最新版を
    利用したい場合は③もありえる)
    Vine Linux
    Vine Linux

    View Slide

  16. Usage
    端末に“firejail” と入力し、
    実行すると、
    次のように表示される。
    Vine Linux
    Vine Linux

    View Slide

  17. Usage
    [email protected]:~$ firejail
    Reading profile /etc/firejail/generic.profile
    Reading profile /etc/firejail/disable-mgmt.inc
    Reading profile /etc/firejail/disable-secret.inc
    Reading profile /etc/firejail/disable-common.inc
    ** Note : you can use --noprofile to disable generic.profile **
    Parent pid 2733, child pid 2734
    Child process initialized
    [[email protected] ~]$
    Vine Linux
    Vine Linux

    View Slide

  18. Usage
    この状態では、サンドボックスの中で
    bash が動いている状態。
    [[email protected] ~]$ ps -ef
    UID PID PPID C STIME TTY TIME CMD
    65534 1 0 0 02:22 pts/0 00:00:00 firejail
    toshi 2 0 0 02:22 pts/0 00:00:00 /bin/bash
    toshi 3 2 0 02:22 pts/0 00:00:00 ps -ef
    [[email protected] ~]$
    Vine Linux
    Vine Linux

    View Slide

  19. Usage
    因みに、サンドボックス中では
    各種制限が設定されている。
    • /sbin, /usr/sbin, /usr/local/sbin 等はアクセス不可。
    当然コマンドも実行不可。
    • su, mount, sudo 等使用できないコマンドが存在。
    Vine Linux
    Vine Linux

    View Slide

  20. Usage
    この状態は Linux Kernel の
    各種名前空間機能(mount, PID 等)
    に加え、
    /etc/firejail 以下にある profile で
    設定されている。
    Vine Linux
    Vine Linux

    View Slide

  21. Usage
    generic.profile(snip)
    include /etc/firejail/disable-mgmt.inc     ← include する file の指定
    include /etc/firejail/disable-secret.inc
    include /etc/firejail/disable-common.inc
    blacklist ${HOME}/.pki/nssdb         ← blacklist の指定
    blacklist ${HOME}/.lastpass
    blacklist ${HOME}/.keepassx
    blacklist ${HOME}/.password-store
    caps.drop all                 ← フィルタの指定
    seccomp
    protocol unix,inet,inet6
    Vine Linux
    Vine Linux

    View Slide

  22. Usage
    disable-common.inc(snip)
    # History files in $HOME
    blacklist-nolog ${HOME}/.history ← --debug 指定時ログ出力抑止
    read-only ${HOME}/.local/share/applications ← read-only 指定
    # var
    blacklist /var/spool/cron
    # system management
    blacklist ${PATH}/mount
    blacklist ${PATH}/sudo
    Vine Linux
    Vine Linux

    View Slide

  23. Usage
    詳細は“man firejail-profile”に
    譲るが、サンドボックスは
    基本的に profile を書いて構築する。
    (profile を使わない場合は“--noprofile”オプション利用)
    Vine Linux
    Vine Linux

    View Slide

  24. Usage
    用意されている profile には、
    以下のようなもの(一部)がある。
    • audacious
    • chromium
    • dropbox
    • firefox
    • gnome-mplayer
    • google-chrome
    • hexchat
    • steam
    • unbound
    • wine
    - added in 0.9.40 -
    • ubuntu snap
    application
    • openbox
    Vine Linux
    Vine Linux

    View Slide

  25. Usage
    これらの profile を利用するには、
    “firejail firefox”
    のように入力する。
    (オプションも使う場合は“firejail --hoge firefox”と入力)
    Vine Linux
    Vine Linux

    View Slide

  26. Usage
    オプションは非常に豊富に
    用意されている(以下は一部)。
    • profile デバッグ: --debug, --debug-blacklists, etc..
    • 環境変数設定: --env=name=value
    • ログ出力: --output=log_filename
    • profile 位置指定: --profile-path=directory
    Vine Linux
    Vine Linux

    View Slide

  27. Usage
    • ホスト名指定: --hostname=name
    • ネットワーク系指定: {--defaultgw, --dns, --ip}=address,
    --net={bridge, ethernet}_interface, etc..
    • 監視用途: --netstats, --list, --top, etc..
    • blacklist 指定: --blacklist=dirname or filename
    • Linux capabilities 指定: --caps.{drop, keep}=hoge
    • Read-only 指定: --read-only=dirname or filename
    • (参考)--X11, --appimage
    Vine Linux
    Vine Linux

    View Slide

  28. Usage
    サーバーでの活用例として
    apache で解説すると、
    “sudo firejail /etc/init.d/apache2
    (/usr/sbin/apache2ctl)
    start”で起動させる。
    Vine Linux
    Vine Linux

    View Slide

  29. Usage
    [email protected]:~$ sudo firejail --net=enp3s0 --ip=192.168.0.10 /usr/sbin/apache2ctl start
    Reading profile /etc/firejail/server.profile
    Reading profile /etc/firejail/disable-mgmt.inc
    ** Note : you can use --noprofile to disable server.profile **
    Parent pid 4152, child pid 4153
    The new log disrectory is /proc/4153/root/var/log
    Interface    MAC     IP     Mask     Status
    lo             127.0.0.1 255.0.0.0 UP
    eth0-4152 1a:2b:3c:4d 192.168.0.10 255.255.255.0 UP
    Default gateway 192.168.0.1
    Child process initialized
    * Starting Apache httpd web server apache2
    Vine Linux
    Vine Linux

    View Slide

  30. Usage
    ホスト(192.168.0.2)
    とは
    別 IP を割り当て、apache を
    起動させている。
    (なお、systemctl から起動させる場合 Unit を override し、
    firejail を呼び出すよう設定することが必要とされる)
    Vine Linux
    Vine Linux

    View Slide

  31. At the end
    •手軽なサンドボックス構築・利用ツールとして紹介
    •活用方法の模索:多彩なオプションの把握が鍵
    ➔ コンテナーと類似した使い方もできる?
    •既存コンテナーエンジンとの連携
    ➔ 「Can I use Firejail as a container engine?」との
    FAQ に「Yes, Firejail can run Docker, LXC and
    OpenVZ containers.」との回答。要調査。
    Vine Linux
    Vine Linux

    View Slide