Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SELinuxで堅牢化する / selinux
Search
Mako
January 15, 2022
Technology
1.9k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SELinuxで堅牢化する / selinux
WASNight 2022 Kick-Off = OWASP x WASForum Night の Hardening Session での発表資料
Mako
January 15, 2022
More Decks by Mako
See All by Mako
マイナンバーカードの暗号技術とセキュリティ
tex2e
2
3.2k
TLS 1.3自作入門 / tls13
tex2e
0
1.3k
プロトコルの形式的安全性検証ツールProVerif / proverif
tex2e
0
1.4k
マイナンバーカードで署名する / mynumbercard
tex2e
2
3.6k
Other Decks in Technology
See All in Technology
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
200
Screen Lens - 今見てる画面を翻訳する
komagata
0
310
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
29
24k
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.6k
品質と信頼性を地続きにする
grimoh
0
410
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
820
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
260
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
130
AI de Idea
kawaguti
PRO
2
110
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
900
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
1
530
beyond jj: config & tools ecosystem
indirect
0
450
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Designing for humans not robots
tammielis
254
26k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
A designer walks into a library…
pauljervisheath
211
25k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Marketing to machines
jonoalderson
1
5.8k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
The Pragmatic Product Professional
lauravandoore
37
7.4k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
460
Transcript
SELinuxで堅牢化する H2021AF Team8, @tex2e 2022/1/14
SELinuxの検索上位ワード SELinuxと言えば...
通常のアクセス制御 (DAC) サブジェクト 参照:https://opensource.com/business/13/11/selinux-policy-guide オブジェクト アクション
通常のアクセス制御 (DAC) サブジェクト 参照:https://opensource.com/business/13/11/selinux-policy-guide オブジェクト アクション 誰でもアクセスできる と、 他人に食べられる (権限777などの設定ミス)
犬の着ぐるみを被った狼 だったら、 狼は不正にアクセスできる (管理者への権限昇格)
SELinuxのアクセス制御 (MAC) サブジェクト 参照:https://opensource.com/business/13/11/selinux-policy-guide オブジェクト ポリシー リファレンス モニター (RBAC; Role
Based Access Control) (TE; Type Enforcement) アクション 検証
TE (Type Enforcement) 「プロセス」に対してアクセス権限を割り当ててアクセス制御する 参照:https://opensource.com/business/13/11/selinux-policy-guide 「犬」が「キャットフード」を食べるのはポリシー違反
Log4j2のRCE脆弱性に対する緩和 参照:https://blogs.jpcert.or.jp/ja/2021/12/log4j-cve-2021-44228.html tomcat_t が *_port_t に tcp_socket name_connect (外部ポート接続) することは許可されているか?
↑ ※デフォルトは許可. TomcatのSecurityManagerを推奨 tomcat_t が tomcat_*_t 以外に file read/write/execute (ファイル書込/実行) することは許可されているか? 攻撃者 やられサーバ
Hardening競技環境での初期設定 SELinuxは無効化されている SELinux=disabled
Hardening競技環境での構成変更 SELinuxを有効化して運用するまで(競技用) ~]# sed -ie 's/^SELINUX=disabled/SELINUX=permissive/' /etc/selinux/config ~]# reboot ~]#
setenforce 1 ~]# setsebool -P httpd_can_network_connect_db On ~]# setsebool -P httpd_can_sendmail On ~]# tail -f /var/log/audit/audit.log | grep "denied" ※復旧できるように起動時は permissive、起動後にsetenforceで有効化 ※構成変更後は必要に応じて audit2allowコマンドでカスタムポリシーを作って適用
監査ログ:ファイル編集拒否 [srv05] 2021/11/19 11:30:26 type=AVC msg=audit(1637289026.349:218): avc: denied { write
} for pid=2006 comm="/usr/sbin/httpd" name="configure.php" dev="vda1" ino=139945 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file permissive=0 httpd(Webサーバ) が configure.php という名前のファイルに書き込みを試みたので拒否した - Webサーバ経由でのファイルの改ざん • httpd_sys_content_t : 読み取りのみ • httpd_sys_rw_content_t : 読み書き • httpd_sys_script_exec_t : 実行
監査ログ:ファイル作成拒否 [srv03] 2021/11/19 12:04:10 type=AVC msg=audit(1637291050.436:129): avc: denied { write
} for pid=1540 comm="/usr/sbin/httpd" name="html" dev="vda1" ino=3018892 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=dir permissive=0 httpd(Webサーバ) が html という名前のディレクトリの更新を試みたので拒否した - /var/www/html直下にWebShellファイルを新規作成 1. dir write (ディレクトリの更新時間を編集) ← SELinuxはここで拒否した 2. dir add_name (見出し追加) 3. file create (新規作成) 4. file write (内容書き込み)
監査ログ:外部ポートへの接続拒否 [srv03] 2021/11/19 13:17:14 type=AVC msg=audit(1637295434.210:277): avc: denied { name_connect
} for pid=1538 comm="/usr/sbin/httpd" dest=3000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ntop_port_t:s0 tclass=tcp_socket permissive=0 httpd(Webサーバ) が 3000番ポートにTCPコネクションを試みたので拒否した - RCEによるcurlやwgetなど • 外部DB接続を許可したいときは、ブール値 httpd_can_network_connect_db を On にする
監査ログ:メール送信拒否 [srv06] 2021/11/19 11:43:15 type=AVC msg=audit(1637289795.813:393): avc: denied { read
} for pid=2971 comm="sendmail" name="main.cf" dev="vda1" ino=133340 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:postfix_etc_t:s0 tclass=file permissive=0 sendmail(Webサーバ経由) が main.cf (postfix設定情報) のファイル読み込みを試みたので拒否した - RCEによるsendmailコマンドの実行など • メール送信を許可したいときは、ブール値 httpd_can_sendmail を On にする
監査ログ:sshd改ざん後のログイン 1/2 [srv02] 2021/11/19 13:59:41(user10, user11のパスワード変更作業漏れが原因) type=USER_AVC msg=audit(1637297981.555:302): pid=1 uid=0
auid=4294967295 ses=4294967295 subj=system_u:system_r:kernel_t:s0 msg='avc: denied { start } for auid=n/a uid=0 gid=0 cmdline="/usr/lib/systemd/systemd-logind" scontext=system_u:system_r:kernel_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=service exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?' ユーザログインを管理するシステムサービス がkernet_tドメインのサービス起動を試みたので拒否 - システム改ざん • systemd_logind_exec_t : /usr/lib/systemd/systemd-logindファイルのデフォルトタイプ • ユニットファイルが systemd_logind_exec_t 以外の lib_t などだったから拒否した? • ドメインが systemd_logind_t 以外の kernel_t で動いていたから拒否した?
監査ログ:sshd改ざん後のログイン 2/2 [srv02] 2021/11/19 13:59:41(user10, user11のパスワード変更作業漏れが原因) type=AVC msg=audit(1637297981.609:312): avc: denied
{ transition } for pid=8132 comm="sshd" path="/usr/bin/bash" dev="vda3" ino=100664377 scontext=system_u:system_r:kernel_t:s0 tcontext=unconfined_u:unconfined_r:unconfined_t:s0 tclass=process permissive=0 sshd が /usr/bin/bash を使って制限なし(unconfied_t)のプロセスを生成しようとしたので拒否した - システム改ざん • /usr/bin/bash のタイプが shell_exec_t 以外の bin_t などだったから拒否した?
まとめ 初期設定でセキュリティを有効化する戦略 (Secure by Default) によって、 新しい技術には標準で組み込みセキュリティ (Built-In Security) が含まれている。
- IPv6 : IPsec - HTTP3 (QUIC) : TLS 1.3 - Windows 10 : Windows Defender (WDAC) - Windows 11 : TPM 2.0 + Secure Boot - Docker : Limit Kernel Capabilities - CentOS 4〜 : SELinux - Android 4.4〜 : SELinux 組み込みセキュリティを活用しよう! (SELinux無効化しないで使おう!)
Thank you!
A1. SELinuxで守れないもの - rootアカウントの保護 - 権限が奪取された場合はアクセス制限できるが、パスワードそのものが漏洩した場合はアクセス制限 できない - DoS攻撃 -
リソースの消費が激しいリクエストや内部エラーによるサービス停止は防げない - Webアプリケーション特有の問題 - SQLi, XSS, XSRF などは防げない
A2. unconfined_t(制限なしのタイプ) デフォルトでSELinuxはユーザを制限していないので、パスワードが漏洩すると大問題になる ~]# semanage login -l Login Name SELinux
User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * root unconfined_u s0-s0:c0.c1023 *