Pro Yearly is on sale from $80 to $50! »

Firejailを触ってみよう

 Firejailを触ってみよう

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

5af3060f56ae786c5406b9ef28ed670b?s=128

Toshiharu KUDOH

July 02, 2016
Tweet

Transcript

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

    Toshiharu Kudoh <kudoh@vinelinux.org> Vine Linux Vine Linux
  2. About Me  工藤 寿晴 (twitter id: toshi_kd) ➢ Project Vine

    メンバー ➔ セキュリティチーム ➔ パッケージャー & メンテナー • フォント(日本語及び多言語) • LXDE • デスクトップ GTK+/Qt アプリケーション and more.. Vine Linux Vine Linux
  3. Recent Activity 学術論文を一本発表しました。 (2016.3) ※元来の専攻である歴史学(中国・東北アジア史)の論文です。 調査はともかく執筆の進捗が悪く、非常に難産でした。 出来の如何はさておき、アウトプット重要。 Vine Linux Vine

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

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

    リリースに向けて頑張ります。 Vine Linux Vine Linux
  6. Today's Topic Firejail Vine Linux Vine Linux

  7. Introduction What is Firejail? Vine Linux Vine Linux

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

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

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

    Vine Linux
  12. Introduction 現状日本での注目度は低い。 言及は Linux Daily Topics (「2016 年 5 月

    13 日 ヤバめのアプリはまず"火の檻"で ―サンドボックス「Firejail」が X11 に対応へ」) がほぼ唯一の模様。 (他情報源として ArchWiki 日本語版にページがある程度) Vine Linux Vine Linux
  13. Introduction しかしながら今後の可能性を 秘めたツールと思われるので、 各種情報を参照しながら 「少し紹介してみよう」 というのが今回の主眼。 Vine Linux Vine Linux

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

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

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

  17. Usage toshi@localhost:~$ 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 [toshi@localhost ~]$ Vine Linux Vine Linux
  18. Usage この状態では、サンドボックスの中で bash が動いている状態。 [toshi@localhost ~]$ 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 [toshi@localhost ~]$ Vine Linux Vine Linux
  19. Usage 因みに、サンドボックス中では 各種制限が設定されている。 • /sbin, /usr/sbin, /usr/local/sbin 等はアクセス不可。 当然コマンドも実行不可。 •

    su, mount, sudo 等使用できないコマンドが存在。 Vine Linux Vine Linux
  20. Usage この状態は Linux Kernel の 各種名前空間機能(mount, PID 等) に加え、 /etc/firejail

    以下にある profile で 設定されている。 Vine Linux Vine Linux
  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
  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
  23. Usage 詳細は“man firejail-profile”に 譲るが、サンドボックスは 基本的に profile を書いて構築する。 (profile を使わない場合は“--noprofile”オプション利用) Vine

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

    Vine Linux Vine Linux
  26. Usage オプションは非常に豊富に 用意されている(以下は一部)。 • profile デバッグ: --debug, --debug-blacklists, etc.. •

    環境変数設定: --env=name=value • ログ出力: --output=log_filename • profile 位置指定: --profile-path=directory Vine Linux Vine Linux
  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
  28. Usage サーバーでの活用例として apache で解説すると、 “sudo firejail /etc/init.d/apache2 (/usr/sbin/apache2ctl) start”で起動させる。 Vine

    Linux Vine Linux
  29. Usage toshi@localhost:~$ 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
  30. Usage ホスト(192.168.0.2) とは 別 IP を割り当て、apache を 起動させている。 (なお、systemctl から起動させる場合

    Unit を override し、 firejail を呼び出すよう設定することが必要とされる) Vine Linux Vine Linux
  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