Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SELinuxで堅牢化する / selinux
Search
Mako
January 15, 2022
Technology
3
1k
SELinuxで堅牢化する / selinux
WASNight 2022 Kick-Off = OWASP x WASForum Night の Hardening Session での発表資料
Mako
January 15, 2022
Tweet
Share
More Decks by Mako
See All by Mako
マイナンバーカードの暗号技術とセキュリティ
tex2e
1
1.6k
TLS 1.3自作入門 / tls13
tex2e
0
840
プロトコルの形式的安全性検証ツールProVerif / proverif
tex2e
0
1k
マイナンバーカードで署名する / mynumbercard
tex2e
2
2.5k
Other Decks in Technology
See All in Technology
データの品質が低いと何が困るのか
kzykmyzw
6
1.1k
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
siropaca
7
1.8k
現場で役立つAPIデザイン
nagix
33
12k
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
590
Goで作って学ぶWebSocket
ryuichi1208
0
800
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
19
6.2k
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
2
300
Helm , Kustomize に代わる !? 次世代 k8s パッケージマネージャー Glasskube 入門 / glasskube-entry
parupappa2929
0
250
ハッキングの世界に迫る~攻撃者の思考で考えるセキュリティ~
nomizone
13
5.2k
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
6
1.6k
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
130
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
120
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Scaling GitHub
holman
459
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
What's in a price? How to price your products and services
michaelherold
244
12k
A designer walks into a library…
pauljervisheath
205
24k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Agile that works and the tools we love
rasmusluckow
328
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
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 *