Soumettre la recherche
Mettre en ligne
Programming under capability mode
•
Télécharger en tant que ODP, PDF
•
1 j'aime
•
566 vues
Y
Yuichiro Naito
Suivre
Programming guide under capability mode.
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 18
Télécharger maintenant
Recommandé
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
データベースのお話
データベースのお話
Hidekazu Tanaka
Custom Package Building with Poudriere
Custom Package Building with Poudriere
Yuichiro Naito
カウチなやつら CouchDB in the room
カウチなやつら CouchDB in the room
Makoto Ohnami
Slide
Slide
Kazki Matsumoto
Cache勉強会
Cache勉強会
Shinji Miyazato
R以外の研究ツール
R以外の研究ツール
弘毅 露崎
3-1
3-1
Atsushi Hara
Recommandé
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
データベースのお話
データベースのお話
Hidekazu Tanaka
Custom Package Building with Poudriere
Custom Package Building with Poudriere
Yuichiro Naito
カウチなやつら CouchDB in the room
カウチなやつら CouchDB in the room
Makoto Ohnami
Slide
Slide
Kazki Matsumoto
Cache勉強会
Cache勉強会
Shinji Miyazato
R以外の研究ツール
R以外の研究ツール
弘毅 露崎
3-1
3-1
Atsushi Hara
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
Takashi Hoshino
hiding
hiding
cookies 146
Elastic searchをrailsから使ってみた
Elastic searchをrailsから使ってみた
Yoichi Toyota
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Nobuto Murata
Mongo db勉強会
Mongo db勉強会
otmb
Firefox OS + Raspberry Pi
Firefox OS + Raspberry Pi
EnsekiTT
Unix1
Unix1
Takaya Kotohata
Ext4 filesystem(1)
Ext4 filesystem(1)
Yoshihiro Yunomae
仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slide
k009c1271
データベースキャッシュの競合
データベースキャッシュの競合
kesnke
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
Nobuto Murata
How to read linux kernel
How to read linux kernel
Naoya Ito
フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門
彰 村地
CouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!
aasakawa
分散データベース gun について調べた
分散データベース gun について調べた
keisunagawa
10分で分かるデータストレージ
10分で分かるデータストレージ
Takashi Hoshino
パケット解析ノススメ
パケット解析ノススメ
彰 村地
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
Yikei Lu
FreeBSD Capsicum
FreeBSD Capsicum
Yuichiro Naito
sshdのお話
sshdのお話
(^-^) togakushi
Cygwin 1.7 の紹介
Cygwin 1.7 の紹介
fd0
Contenu connexe
Tendances
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
Takashi Hoshino
hiding
hiding
cookies 146
Elastic searchをrailsから使ってみた
Elastic searchをrailsから使ってみた
Yoichi Toyota
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Nobuto Murata
Mongo db勉強会
Mongo db勉強会
otmb
Firefox OS + Raspberry Pi
Firefox OS + Raspberry Pi
EnsekiTT
Unix1
Unix1
Takaya Kotohata
Ext4 filesystem(1)
Ext4 filesystem(1)
Yoshihiro Yunomae
仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slide
k009c1271
データベースキャッシュの競合
データベースキャッシュの競合
kesnke
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
Nobuto Murata
How to read linux kernel
How to read linux kernel
Naoya Ito
フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門
彰 村地
CouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!
aasakawa
分散データベース gun について調べた
分散データベース gun について調べた
keisunagawa
10分で分かるデータストレージ
10分で分かるデータストレージ
Takashi Hoshino
パケット解析ノススメ
パケット解析ノススメ
彰 村地
Tendances
(18)
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
hiding
hiding
Elastic searchをrailsから使ってみた
Elastic searchをrailsから使ってみた
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Mongo db勉強会
Mongo db勉強会
Firefox OS + Raspberry Pi
Firefox OS + Raspberry Pi
Unix1
Unix1
Ext4 filesystem(1)
Ext4 filesystem(1)
仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slide
データベースキャッシュの競合
データベースキャッシュの競合
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
How to read linux kernel
How to read linux kernel
フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門
CouchDB JP & BigCouch
CouchDB JP & BigCouch
AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!
分散データベース gun について調べた
分散データベース gun について調べた
10分で分かるデータストレージ
10分で分かるデータストレージ
パケット解析ノススメ
パケット解析ノススメ
Similaire à Programming under capability mode
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
Yikei Lu
FreeBSD Capsicum
FreeBSD Capsicum
Yuichiro Naito
sshdのお話
sshdのお話
(^-^) togakushi
Cygwin 1.7 の紹介
Cygwin 1.7 の紹介
fd0
Ruby Postgres 2009
Ruby Postgres 2009
Akio Ishida
Capistrano
Capistrano
Yasuharu Fukuda
Gluster fs and_swiftapi_20120429
Gluster fs and_swiftapi_20120429
Etsuji Nakai
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
cch-robo
Lagopus 0.2
Lagopus 0.2
Masaru Oki
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
Building production server on docker
Building production server on docker
Hiroshi Miura
Building production server on docker
Building production server on docker
Hiroshi Miura
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
Takashi Takizawa
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
シェルスクリプトを極める
シェルスクリプトを極める
bsdhack
20170124 linux basic_1
20170124 linux basic_1
YUSUKE MORIZUMI
バッチリネーマーの制作
バッチリネーマーの制作
eighttails
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
OSSラボ株式会社
Similaire à Programming under capability mode
(20)
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
FreeBSD Capsicum
FreeBSD Capsicum
sshdのお話
sshdのお話
Cygwin 1.7 の紹介
Cygwin 1.7 の紹介
Ruby Postgres 2009
Ruby Postgres 2009
Capistrano
Capistrano
Gluster fs and_swiftapi_20120429
Gluster fs and_swiftapi_20120429
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
Lagopus 0.2
Lagopus 0.2
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Building production server on docker
Building production server on docker
Building production server on docker
Building production server on docker
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
シェルスクリプトを極める
シェルスクリプトを極める
20170124 linux basic_1
20170124 linux basic_1
バッチリネーマーの制作
バッチリネーマーの制作
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
Plus de Yuichiro Naito
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Yuichiro Naito
Bmd
Bmd
Yuichiro Naito
WireGurad in the FreeBSD kernel
WireGurad in the FreeBSD kernel
Yuichiro Naito
Xrdp
Xrdp
Yuichiro Naito
Bhyve debug-server
Bhyve debug-server
Yuichiro Naito
Tramp mode
Tramp mode
Yuichiro Naito
HandBrake with QSV
HandBrake with QSV
Yuichiro Naito
FreeBSD 12.1 RELESE
FreeBSD 12.1 RELESE
Yuichiro Naito
Modern fonts
Modern fonts
Yuichiro Naito
FreeBSD 12.0 RELEASE!
FreeBSD 12.0 RELEASE!
Yuichiro Naito
Psql & proctitle
Psql & proctitle
Yuichiro Naito
Iocage
Iocage
Yuichiro Naito
FreeBSD 11.2 RELEASE!
FreeBSD 11.2 RELEASE!
Yuichiro Naito
How to use PTI & IBRS patch
How to use PTI & IBRS patch
Yuichiro Naito
FreeBSD Desktop
FreeBSD Desktop
Yuichiro Naito
FreeBSD Ports Flavors
FreeBSD Ports Flavors
Yuichiro Naito
Bsdtw repo
Bsdtw repo
Yuichiro Naito
How to use blacklistd
How to use blacklistd
Yuichiro Naito
Ruby build
Ruby build
Yuichiro Naito
Intel graphics
Intel graphics
Yuichiro Naito
Plus de Yuichiro Naito
(20)
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Bmd
Bmd
WireGurad in the FreeBSD kernel
WireGurad in the FreeBSD kernel
Xrdp
Xrdp
Bhyve debug-server
Bhyve debug-server
Tramp mode
Tramp mode
HandBrake with QSV
HandBrake with QSV
FreeBSD 12.1 RELESE
FreeBSD 12.1 RELESE
Modern fonts
Modern fonts
FreeBSD 12.0 RELEASE!
FreeBSD 12.0 RELEASE!
Psql & proctitle
Psql & proctitle
Iocage
Iocage
FreeBSD 11.2 RELEASE!
FreeBSD 11.2 RELEASE!
How to use PTI & IBRS patch
How to use PTI & IBRS patch
FreeBSD Desktop
FreeBSD Desktop
FreeBSD Ports Flavors
FreeBSD Ports Flavors
Bsdtw repo
Bsdtw repo
How to use blacklistd
How to use blacklistd
Ruby build
Ruby build
Intel graphics
Intel graphics
Programming under capability mode
1.
ケーパビリティモードでのプログラミング 2016年7月15日 (株)創夢 内藤 祐一郎
2.
ケーパビリティモード ● FreeBSD 9.0-R
から された しいモード。搭載 新 ● cap_enter(2) を び した の された 。呼 出 後 制限 環境 ● たなファイルディスクリプタを できなくなる。新 取得 ● shmget(2) などのリソース ができなくなる。取得 ● ケーパビィティモードは プロセスにも される。子 継承 ● cap_rights_limit(2) により かく細 (read, write, ...) できる制御 。
3.
メリット ● selinux と
なりユーザの が 。異 設定 不要 ● root に setuid されたプログラムなど、 きすぎる を つプロセスが に を とせる。大 権限 持 自発的 権限 落 ● えば例 ping, traceroute はパケット のために取得 root を権限 つため、 が が つかった に したパケットを持 万 一脆弱性 見 場合 細工 させるなどして の になりやすい。受信 攻撃 標的 ● ケーパビリティモードで していれば、 が されてもア動作 万 一攻撃 クセスできるリソースがないため を められる。安全性 高 ● FreeBSD-11 から ping, traceroute はケーパビリティモードで する。動作
4.
なプログラムの れ基本的 流 1.
必要なファイルディスクリプタを取得する。 2. cap_enter(2) を実行する。 3. 必要があればさらに cap_rights_limit(2) で制限を加える。 4. アプリケーションとしての処理を実行する。 5. プロセス終了。
5.
されるシステムコール制限 ● chdir, stat,
open, rename, mkdir, unlink など にパス を るものは えない。引数 名 取 使 ● connect, bind, sendto に引数 struct sockaddr * をとり 、 を するも送信先 受信元 指定 の ● execve, wait, waitpid, wait3/4/6 ● shm_open, shmget, msgget ● すると使用 ECAPMODE の errno が る。返
6.
を けないシステムコール影響 受 ●
read, write, close, sendfile, select, poll, mmap など のファイルディスクリプタを するもの既存 使用 ● pipe, socket, accept, listen, kqueue など のプロセスに するだけもの自分 影響 ● getpid, getuid, time, gettimeofday など なる のもの単 情報取得 ● fork
7.
より かい を
える細 制限 加 ● cap_rights_limit(2) によりファイルディスクリプタごとに細か く制限することが可能。 ➔ READ ➔ WRITE ➔ IOCTL ➔ FSTAT ➔ FUNLINK ➔ MMAP, MMAP_R, MMAP_W, MMAP_RW など ● 概ねファイルディスクリプタを操作するシステムコール毎に権限 を設定できる。
8.
なファイルアクセス動的 ● プログラム起動時に必要なリソースが全て判明しない場合はどう するのか? ➔ アクセスする
のディレクトリのファイルディスクリプタを してお予定 取得 き、 openat(2) でディレクトリ のファイルを く。以下 開 ➔ または プロセスとの別 通信 (UNIX DOMAIN SOCKET) でオープンした ファイルディスクリプタを け す。受 渡
9.
となるシステムコール代替 ● cap_enter(2) にディレクトリのファイルディスクリプタを前 open("
ディレクトリ名 ", O_RDONLY|O_DIRECTORY) で取得 しておく。 ● openat, renameat, mkdirat など ~ at を する。系 使用 ~ at は となるディレクトリのファイルディスクリプタ系 基準 から パスで する。相対 指定 ● パスに相対 “ ..” を れて ディレクトリに がる はカーネル入 親 上 操作 に される。拒否 ● fchdir, fstat などファイルディスクリプタを にとるものを引数 する。使用
10.
プログラムの れ ファイルアクセス流
( ) 1. base=open(“/var/data”,O_RDONLY|O_DIRECTORY); 2. cap_enter(); 3. fd=openat(base, “sample.txt”, O_RDWR); 4. read(fd, buf, size); ... 5. close(fd);
11.
ネットワークの利用( UDP ) ●
cap_enter() の前にソケットを作成し、予め送信先や受信元を設 定しておく。 ➔ sendto(2), bind(2) は えなくなる。使 ● 送信先は connect(2) で指定する。 ● 受信元は bind(2) で指定する。
12.
プログラムの れ流 (
UDP 送信) 1. sock=socket(PF_UNSPEC, SOCK_DGRAM, 0); 2. < sockaddr に接続先を入れる > 3. connect(sock, &sockaddr, size); 4. cap_enter(); 5. send(sock ,data, len); 6. recv(sock, buf, buf_len); 7. … 8. close(sock);
13.
プログラムの れ流 (
UDP 受信) 1. sock=socket(PF_UNSPEC, SOCK_DGRAM, 0); 2. < sockaddr に受信元を入れる > 3. bind(sock, &sockaddr, size); 4. cap_enter(); 5. recv(sock ,buf, buf_len); 6. send(sock, data, size); 7. … 8. close(sock);
14.
ネットワークの利用( TCP ) ●
cap_enter() の にソケットを し前 作成 bind(2) または connect(2) しておく。 ● bind(2) のソケットに済 accept はできるため は 。受信 可能 ● connect(2) はたとえ じ であっても できないため、同 接続先 使用 タイムアウトなどで することができない。再接続 ● クライアントプログラムならば、プロセスを する。再起動 ● さもなければ unix domain socket を して、経由 プロセスが したソケットを け してもらう。別 接続 受 渡
15.
ソケット け しの受
渡 例 親プロセス 子プロセス socketpair(PF_UNIX) fork() send(“ ”ホスト名:ポート番号 ) connect() sendmsg(ソケット) recv() recvmsg() cap_enter()
16.
プロセス生成 ● fork, fexecve
が えるため、使 ファイルディスクリプタさえあれば イメージを 。実行 起動可能 しかし、ケーパビリティモードは プロセスにも子 されるため、継承 /libexec/ld-elf.so.1 の み みに読 込 してしまう。失敗 スタティックリンクされたプログラムなら できる。起動 ● wait ができないため、 ち わせる がない。待 合 手段 ● 11-R では pdfork(2), pdwait(2) が される だったは実装 予定 ず。。。
17.
その他 ● libc を
めたライブラリについては が い。含 制限 多 ● fopen() ではなく fdopen() を うなど、プログラム での使 側 対処 が 。必要 ● getpwent() など で にファイル内部 暗黙 (/etc/passwd など ) を するものは えない。参照 使 ● casperd を して なリソースにアクセスするようになる経由 必要 み。見込
18.
に最後 root に setuid
するプログラムを るときには作 ケーパビリティモードを すると使用 より なプログラムを ることができます。安全 作
Télécharger maintenant