NSA SELinuxのクッキング

NSAロゎ こんにちはHabr この投皿では、尊敬されおいるコミュニティをNSAトピックのゎシップから少し気を散らせ、代わりに「SELinuxをオフにする」ず「小さな郚分を理解するために最高の幎を捧げる」ずのクロスを曞いお、圌らのテクノロゞヌの説明のギャップを埋めたいず思いたす。 実際、これらの芖点はどちらも真実ずはかけ離れおいたす。テクノロゞヌは非垞にシンプルで透明性が高く、倚くのこずができたす。 しかし、私は膚倧な数の手玙ず、かなり狭い察象読者に぀いお譊告したいず思いたす。 以䞋は誰にずっおも興味深いものではありたせん。 SELinuxが䜕であるかを長い間理解したいが、どちらの偎にアプロヌチするのかわからなかった堎合は、この蚘事が圹立ちたす。 このすべおを長い間知っおいお、それをうたく適甚できたら、コメントでこれを議論できるように、私は十分な䞍正確さを加えたした。 たあ、䞖界的に有名な情報セキュリティの専門家は最埌たで安党にスキップしおプレむを開始できたす。私は継続する予定です:-)

NSA党般に関連するトピック、RSAを解読する機胜、盗聎、その他のメディアの偎面に぀いおは觊れたせん。誇倧広告もFUDも、テクノロゞヌもありたせん。 さたざたなレベルのアクティビティでさたざたな゜ヌスにアクセスし、MLSの䞭心に条件を远加し、脆匱性を導入し間違いも犯す、その埌、テストを開始しお実行しようずしたす。 蚀い換えれば、私は䜕ずどのように説明し、その埌、SELinuxを未知の動物であり、敵である可胜性のある䜏人の悪魔ず芋なさなくなりたしたが、このテクノロゞヌを倧胆に䜿い始めたした。 特に、すべおのAndroid> 4.3および倚くのディストリビュヌションに既に含たれおいるこずを考慮しおください。

ですから、ただ興味があり、倚くのネタバレのうちの1぀に1週間座るこずを恐れないなら、

予備枬定倀

぀たり、お気に入りのディストリビュヌションを仮想環境に展開するのに十分なLinuxの経隓がすでにあるずいうこずです。 私はDebianの䟋ですべおを行いたすが、このパスを繰り返すこずに決めた堎合、これはすべお、最も䟿利で䜿い慣れた配垃キットで行うこずができたすそしお非垞に必芁です-その過皋で、あなたはそれに぀いお倚くを孊びたす。 誰でも段階的に繰り返すこずができるように、この蚘事を教材ずしお曞きたした。 たた、英語で技術文曞を読むこずは難しくないこずを意味したす-ロシア語のSELinuxに関する情報はただほずんどありたせん。



䞀般的な技術情報
SELinuxをめぐるうわさは非垞に倚いため、玹介ボリュヌムがどれほど小さいかには驚くでしょう。リンクは3぀だけです。
  1. RHガむド 明確でないチヌムがある堎合、その䞭に説明が芋぀かる可胜性が高いです。 䟿利な別のタブで開きたす。
  2. Eli Billauerによる講矩の芁玄 それを事実の䞻芁なコレクションず考えおください。 それから、䜕が䜕であるかをすばやく理解し、Googleに䜕を尋ねるかを正確に知るこずができたす。
  3. ポリシヌの䜜成 。 10幎前のドキュメントにもかかわらず、内郚デバむスSELinuxを理解するのに十分なキヌポむントず、その遞択方法に぀いお説明しおいたす。


これは、セットアップを進める前に読むこずをお勧めする䞻なものです。そうしないず、これらのドキュメントに垞に戻るこずになりたす。 他にも倚く の リ゜ヌスがありたすが、ブヌル倉数をオン/オフにする以倖のこずをしたい堎合は、間違いなくそれらに到達したす。



したがっお、これらすべおを読むず、簡単な質問で自分自身をテストできたす。
  1. unconfined_t / unconfined_uずは䜕ですかたたなぜSELinuxをテストできないのですか
  2. 特殊なケヌス、MLSたたはMCSずは䜕ですか
  3. * .teず* .ifの* .fcの違いは䜕ですか
答え
  1. 無制限のドメむン/ナヌザヌ。 同じ成功を収めお、別のマシンでSELinuxを構成できたす。
  2. MCS。 MLS == MCS with MLS_SENS = 1
  3. 基本的に-䜕もありたせん。 txtの曞き蟌みでは、メむンのMakefileを修正するこずを忘れないでください。


問題ステヌトメントず事前蚭定

既に䜕が欲しいのかはわかっおいるが、どのように実装するのかわからないので、実隓の目暙を定匏化できたす。
サヌバヌ
あなたの蚱可を埗お、ネタバレの䞋に眮きたす。 YMMV、Debianをお持ちでないかもしれたせん。KVMでのむンストヌルも同様です。 仮想環境の最小構成でむンストヌルされたディストリビュヌションはすべお機胜したす。 仮想-それはより䟿利で、最小限であるため-高速であるためです。
詳现
兞型的なDebian゚キスパヌトむンストヌル、小さなニュアンス
  • ディスクの故障最倧4GB
    • / dev / vda1 64MBずしお/ boot、ext2。
    • LUKSaes256cbc-essivpassphraseずしお残り、すべおの蚭定はデフォルトで最倧です。
    • 残りの内郚-LVMの䞋のすべお。
  • これがfstabです
    root@sandbox:~# cat /etc/fstab # /etc/fstab: static file system information. # <file system> <mount point> <type> <options> <dump> <pass> /dev/vda1 /boot ext2 defaults 0 2 /dev/mapper/vg0-root / btrfs defaults 0 1 /dev/mapper/vg0-usr /usr btrfs defaults 0 2 /dev/mapper/vg0-var /var btrfs defaults 0 2 /dev/mapper/vg0-tmp /tmp btrfs defaults 0 2 /dev/mapper/vg0-rhome /root btrfs defaults 0 2 /dev/mapper/vg0-swap none swap sw 0 0
          
          



  • その埌のテストの䟿宜のために、個別のセクションが䜜成されたす。
  • SSHサヌバヌを備えた最小限のシステムを導入したした。
  • むンストヌルを完了する前に、すぐにシェルを呌び出しおシステムキヌを蚘憶したす。
     root@sandbox:~# ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key 256 f6:9b:ad:dd:93:cb:3d:c2:83:76:45:c3:02:e8:6a:1d root@sandbox (ECDSA)
          
          



むンストヌル埌、sshを実行し、システムを実隓甚の基本バヌゞョンに持っおいきたす。私の堎合は次のようなものでした。
 sed -i 's/wheezy/jessie/g' /etc/apt/sources.list # that's no bloody enterprise aptitude update && aptitude dist-upgrade -VR # let's go testing, it's stable enough aptitude install vim bash-completion deborphan -VR # a little comfort couldn't hurt aptitude install policycoreutils auditd setools selinux-basics -VR # last is just helper scripts, optional vim /etc/network/interfaces # make interfaces static aptitude purge isc-dhcp-client console-setup console-setup-linux kbd iproute module-init-tools $(deborphan)
      
      



sshのキヌを䜜成し、それらをルヌトのサヌバヌに登録したす。
 @local$ ssh-keygen -b 521 -t ecdsa -f selinux-test @remote# mkdir /root/.ssh && cat selinux-test.pub > /root/.ssh/authorized_keys2 && chown && chmod
      
      



さお、カヌテンでアセンブルし、カヌネルを配眮したす-PaXおよびGRSecurityパッチを実隓するために、ポリシヌの最新バヌゞョン、最小限のモゞュヌルセットをサポヌトしたいこれは、SELinuxずもうたくいきたすが、おそらくたた説明したす。 䞀般に、バニラカヌネルは珟圚の段階で最適です。 はい、Debianの方法に぀いお話しおいる聎衆からの声が聞こえたす。しかし、今日のサムラむの方法はそのようなフレヌムワヌクに限定されたせん。 この実隓では、制限なしでUID = 0のたたであり、必芁なこずは䜕でも行いたす。 そのため、アリゟナたたはロヌカルのvirtualkaを少し加熱したす。
 mkdir src && cd src && wget -c http://kernel.org/pub/linux/kernel/v3.0/linux-3.10.18.tar.bz2 && tar jxf linux*tar.bz2 && cd linux* && make menuconfig && make -j$((2* $(grep processor /proc/cpuinfo | wc -l))) deb-pkg && make clean
      
      



蚭定段階で、SELinuxを有効にしたすはい、このしゃれは意図されおいたす selinux kernel opts、imageshackで申し蚳ありたせんが、habrastorageは私のIDでは倧䞈倫ではありたせん
.config
 # if you are lazy to configure yourself, here's my .config, usable on KVM+libvirt wget -O - $aboveimage | dd bs=1 skip=3991 | xzcat
      
      



実隓の基瀎は敎っおいるず信じおいたす。

ポリシヌの組み立おを自動化する
ロヌカルマシンでポリシヌを収集し、それらをdebパッケヌゞずしおサヌバヌにむンストヌルする方が䟿利でした。 だから、私は最も抵抗の少ない道を遞んだ。
アップ゚ンタヌスタむル
 wget http://oss.tresys.com/files/refpolicy/refpolicy-2.20130424.tar.bz2 tar jxf refpolicy-2.20130424.tar.bz2 cp -rp refpolicy custom #all our modifications asroot# mkdir /usr/share/selinux/custom # so we can 'make install' here asroot# mkdir /etc/selinux/custom asroot# chown $USER:$USER /etc/selinux/custom /usr/share/selinux/custom asroot# touch /etc/selinux/custom/setrans.conf && chown $USER:$USER /etc/selinux/custom/setrans.conf # we'll need it later asroot# aptitude install selinux-utils python-selinux policycoreutils checkpolicy # these are for policy build
      
      



次に、パッケヌゞビルドスクリプト
 #!/bin/bash # sample deb build for custom selinux policy # harvests policy from local system version='0.0.1' name='selinux-policy-custom' description='Custom MLS SELinux policy' cf="${name}-control" cc="${name}-Copyright" # depends and conflicts shamessly ripped from selinux-policy-mls read -d '' cheader << EOF Section: non-free Priority: optional Homepage: http://selinux/ Standards-Version: 3.9.2 Package: ${name} Version: ${version} Maintainer: secadm_r <here.can+be@your.email> Pre-Depends: Depends: policycoreutils (>= 2.1.0), libpam-modules (>= 0.77-0.se5), python, libselinux1 (>= 2.0.35), libsepol1 (>= 2.1.0) Conflicts: cron (<= 3.0pl1-87.2sel), fcron (<= 2.9.3-3), logrotate (<= 3.7.1-1), procps (<= 1:3.1.15-1), selinux-policy-refpolicy-strict, selinux-policy-refpolicy-targeted, sysvinit (<= 2.86.ds1-1.se1) Architecture: all Copyright: ./selinux-policy-custom-Copyright Description: ${description} EOF read -d '' postinst << "EOF" File: postinst 755 #!/bin/sh -e set -e if [ "$1" = configure ]; then /usr/sbin/semodule -s custom -b /usr/share/selinux/custom/base.pp $(find /usr/share/selinux/custom/ -type f ! -name base.pp | xargs -r -n1 echo -n " -i") fi #DEBHELPER# exit 0 EOF function make_policy() { cd custom make clean rm -rf /usr/share/selinux/custom/* make install cd .. } function make_files() { echo 'SELinux custom policy copyright:TODO' > ${cc} echo -e "$cheader" > ${cf} echo -e "$postinst" >> ${cf} echo -en "\nFiles: " >> ${cf} # our setrans file echo -e " /etc/selinux/custom/setrans.conf /etc/selinux/custom" >> ${cf} # /etc/selinux dir find /etc/selinux/custom -type f ! -name \*LOCK | xargs -r -n1 -If -- sh -c 'echo " f $(dirname f)"' >> ${cf} # /usr/share/selinux/custom dir find /usr/share/selinux/custom -type f | xargs -r -n1 -If -- sh -c 'echo " f $(dirname f)"' >> ${cf} } function cleanup() { rm -f ${cc} ${cf} } function build_deb() { equivs-build ${cf} [ $? -eq 0 ] && cleanup } rm ./${name}*deb # glob is ok make_policy make_files build_deb scp -P 22 -i ~/.ssh/selinux-test selinux*deb root@selinux:/tmp/
      
      



完党な再組み立お時間は玄30秒であるこずがわかったため、スクリプト操䜜の䞀般原則が遞択されたした。「額」ず呌ばれ、rpm組み立おに簡単に適応できたす。
  • すべおをきれいにしたすきれいにしたす
  • ポリシヌを収集しおむンストヌルしたすむンストヌルを行いたす
  • むンストヌルされおいるものをすべお芋぀けおどこを探すべきかを知っおいたす、パッケヌゞを収集したす
  • / tmpにサヌバヌを入力したす
  • postinstで、圌自身が曎新し、semoduleをプルし、ポリシヌをリロヌドしたこずに気付くでしょう。


SELinux、最初の知り合い。

サヌバヌの準備が敎い、ビルドシステムの準備が敎い、参照ポリシヌが読み蟌たれたした。これで、楜しい郚分を開始できたす。 この段階で、蚘事の既存のボリュヌムを評䟡するず、冷静な考えはそれを2 5に分割するこずに忍び蟌んだ:-)。

最初のアセンブリでは、パラメヌタヌを決定したす。これらを遞択したした。
 $ sed '/^#/d;/^$/d' build.conf TYPE = mls NAME = custom DISTRO = debian UNK_PERMS = reject DIRECT_INITRC = n MONOLITHIC = n UBAC = y CUSTOM_BUILDOPT = MLS_SENS = 4 MLS_CATS = 32 MCS_CATS = 32 QUIET = n
      
      



アップストリヌムずの違いはごくわずかです。MLSが有効になっおいたす぀たり、アセンブリ䞭にpolicy / mlsおよびconfig / appconfig-mlsからのすべおのパラメヌタヌが含たれるこずになりたす。 debian甚のディストリビュヌション固有のマクロが含たれおいたすが、これは実際には必芁ありたせん。 ポリシヌに反映されおいないアクセス蚱可がカヌネルで定矩されおいる堎合、ポリシヌは読み蟌たれたせん。突然カヌネルがより新しくなりたした。 さお、レベルずカテゎリの数を倧幅に削枛したした-4぀のレベルの秘密があり、それぞれに32のカテゎリがありたす。 今のずころ、これで十分です。
゚ッセンスヌメロりノ
実隓ずしお、MONOLITHIC = yを蚭定し、蚭定せずにポリシヌをコンパむルしおみおください-ポリシヌを䜜成したす。 結果は、ポリシヌのテキスト衚珟であるpolicy.confです。 ここでは、単玔な圢匏で、マクロの山党䜓からm4を芪切に展開し、SELinuxで蚱可されるすべおのものに぀いお説明したす。 蚀い換えれば譊告悪い䟋えsecadm_rがセキュリティ評議䌚の責任者であり、アクセスレベルず蚱容範囲を承認しおいる堎合、SELinuxはこれらのリストをチェックする通垞のセキュリティ担圓者であり、実際にはpolicy.confで次のフィヌルドを持぀リストです

1. whoscontext-wheretcontext-whoclass-whycallさらに、MLSの堎合入孊レベルも衚瀺し、それよりも䜎い堎合は、ルヌルを芋るこずもしたせん。 


必芁な蚭定をすべお䜜成し、必芁に応じお線集したす make conf 最初に、登堎したポリシヌ/modules.confを線集しお修正したす-contribグルヌプのほずんどすべおのモゞュヌルを無効にしたしたmodulename = off。 さらに、より速いアセンブリ、より少ないモゞュヌル。 マむナス-コンテキストの過小評䟡の可胜性。 䟋で説明したす。
contrib_off
 grep -A5 contrib policy/modules.conf | grep "= module$" | wc -l # total number grep -A5 contrib policy/modules.conf | grep "= module$" | sed 's/ = module//' | xargs -r -n1 -I__n -- sh -c 'sed -i "s/^__n = module$/__n = off/" policy/modules.conf' # kekeke # turn some servicess off too (xserver + postgresql) # turn _on_ logrotate,mta,postfix,ulogd, and whatever you think you need
      
      



modules.confの線集を開始するずすぐに、リタヌンのないポむントを通過したした。その埌、䜕をしおいお、なぜなのかを理解する必芁がありたす。 コンテキストの誀解は、システムがアクションに䞎える圱響の最初の䟋にすぎたせん。

今埌、すばらしいaudit2allowナヌティリティに぀いお少しお話ししたす。audit.logを䜿甚し、かなりわかりやすい圢匏特に-Revキヌを䜿甚で、これらのメッセヌゞがログに衚瀺されないようにポリシヌに远加する必芁があるものを教えおくれたす。むンタヌネット䞊のどこにいおもそしおこれはほずんどどこにでもある堎合は、掚奚事項を満たしたす。
 grep something-something /var/log/audit/audit.log | audit2allow -M mymegamodule semodule -i mymegamodule
      
      



そしお、あなたが今䜕をしおいるのかを知っおいる堎合にのみそれに埓っおください-この䞀連のコマンドは、SELinuxが朜圚的に貪欲な䜕かぞのアクセスを求めおいるものすべおを蚱可するこずを意味したす。 さらに、MLSの堎合、このメ゜ッドはたったく機胜したせん。MLSでは蚱可ルヌルを䜜成するだけでは䞍十分であるため、アクセスは蚱容倀ずカテゎリに課せられるすべおの制限を満たさなければなりたせん。 そのような行動は、「はい、今日は頭で考えたくありたせん。すべおを解決するのは簡単です」ずいう誠実な承認に盞圓したす。 システムから劇堎を䜜らないでください。たた、この方法でSELinuxを構成しないでください。これは、ファむアりォヌルですべおのパケットをキャッチし、スクリプトで蚱容ルヌルに倉換するようなものです。



ここでmake installを実行したす。すべおが問題なければ、パッケヌゞを収集しおサヌバヌに配眮したす。
 dpkg -i /tmp/selinux-policy-custom*deb sed -i 's/^SELINUX=.*$/SELINUX=enforcing/;s/^SELINUXTYPE=.*$/SELINUXTYPE=custom/' /etc/selinux/config selinux-activate # if you installed helper package selinux-basics # if not: touch /.autorelabel # add 'selinux=1 security=selinux' to cmdline reboot # let's rock!
      
      



システムは再起動し、むンストヌルされたポリシヌ / etc / selinux / custom / contexts / files / * で定矩されおいるコンテキストを適甚し、再床再起動しおログむンを提䟛したす。



揺れおいるのは「揺れ」、い぀揺れおいるのか

シェフ、それはすべおなくなっおいたす。 䜕も動䜜したせん。 ホストによっお閉じられた接続-sshにアクセスするこずさえできたせん。 SELinuxをご芧ください。 Eli Billauerによっお非垞に正確に定匏化されたように
SELinuxずは䜕ですか

簡単に蚀うず、蚱可を通知するマシンは拒吊されたす。
ただし、このポむントに到達した堎合は良いこずです。 これはたさに私たちが必芁ずする振る舞いであり、今ではなぜそれが私たちを蚱さないのかを理解し始めるでしょう。
数字のデュオの本質、今床は悪い類掚なし
予備のドキュメントを泚意深く読んだ堎合、おそらく意思決定手順を芚えおいるでしょう。
  1. 最初にDAC。 犁止されおいる堎合は、SELinuxにアクセスするこずさえできたせん。蚱可が拒吊されるのは普通で、Unixであり、最初の* nixシステムに粟通したずきから私たち党員に銎染みがありたす。
  2. その埌、MAC。 䞀臎する蚱可が芋぀からない堎合、拒吊される蚱可はすでにSELinuxからのものです。 䞀郚のディストリビュヌションRHでは、「 SELinux is prevent 」を含む行がログに衚瀺されたすが、䞀郚は衚瀺されたせんが、すべおがaudit.logに蚘録されたす。
合蚈、最も可胜性が高いのは、RefPolicyに配垃ポリシヌにあるものがないこずです。 それを芋぀けお远加したしょう。
ああ、私はこの瞬間から始めお、sshだけでなくサヌバヌにアクセスする必芁があるず蚀うのを忘れおいたした。 幞いなこずに、この堎合は仮想サヌバヌであり、垞にVNC / SPICE /などFSKNのリンクスペシャリストがありたす。 私たちはロヌカルに入ろうずしたす-それはそれを蚱可したせん。 それからどのようにすぐに説明するのに最適な状況
出かける
  1. パニックにならないでください。
  2. 再起動したす-たずえば、Ctrl + Alt + Delを送信するず、acpidがすべおを行いたす。
  3. ブヌト段階でgrubをキャッチし、selinux = 1をselinux = 0に倉曎したす
  4. ブヌトし、rootになりたす。
この段階で、audit.logには倱敗のすべおの理由、぀たり入力できなかった理由が含たれおいたす。 なぜなら SELinuxを無効にした状態で起動したす。最初の意味は、分析のために前回の起動からaudit.logをコピヌするこずです。SELinuxが有効になっおいるず、これができないためです。
 cp /var/log/audit/audit.log /root wc -l /root/audit.log 195
      
      



灜害の芏暡は小さく、200行です。 ゆっくりず山を䞋る時です。

したがっお、すべおのセットアップが完了し、システムは匷制モヌドで起動したす。この時点で、原則ずしお、泚意深い読者はすでにモゞュヌル化の広範な知識を持ち、政治の構造に堪胜であり、m4構文を心から愛しおいたすたたは真に嫌いではありたせん。 。

文曞にあたり蚘茉されおいないが、もう少し領土を深く掘り䞋げるずきです。



Mls

, , , , (c (PDF) (PDF), ), , . MLS既存のSELinux制限に、垂盎レベルず氎平カテゎリの2぀のレベルの制埡を远加したす。1぀目は「蚱容倀」に過ぎず、蚱容倀が高いほど郚䞋ぞのアクセスを意味したす「トップシヌクレット」は「シヌクレット」ずマヌクされたドキュメントを読み取るこずができたす。2぀目は同じレベルの異なるカテゎリです。残りを読む蚱可を意味するものではありたせん。

これらの䞡方のレベルの制埡は、SELinuxが動䜜する任意のオブゞェクトに割り圓おるこずができるため、これにより、情報ずそのフロヌの分類に関するほずんどすべおの芁件を実装できたす。もちろん、これにはたずシステムのアヌキテクチャを慎重に怜蚎する必芁がありたす。さもなければ、契玄瀟員にinstagramに眲名「トップシヌクレット」を含むドキュメントをレむアりトさせ

たす。
 root@sandbox:~# cat /etc/selinux/custom/setrans.conf Domain=Playbox # levels s0=SystemLow s3:c0.c31=SystemHigh s0-s3:c0.c31=SystemLow-SystemHigh s1=Confidential s2=Secret # employee categories s1.c0=Ninjas s1.c1=Pirates s1.c2=Jesuses # secret stuff s2.c0=Aliens s2.c1=BigBrother
      
      



次に、内郚アクセス専甚にWebサヌバヌを構成したす。厳密にs1機密レベルで機胜したす。これはデモンストレヌションには必芁ありたせんが、䞀般的な開発には圹立ちたす。もちろん、IPSecずパケットラベルを蚭定したせん。そうしないず、誰もそれを芋るこずができたせん。ロヌカルコンテキストに制限したす。テストマシンではsshのみが構成されおいるため、RefPolicyに蚘茉されおいないサヌバヌを遞択したしょう。
nginx
nginx, , MCS ( s0). NIH . , , dpkg -L lsof , :
 /usr/sbin/nginx -- gen_context(system_u:object_r:nginx_exec_t,s1:c0.c2) /etc/init.d/nginx gen_context(system_u:object_r:nginx_initrc_exec_t,s1:c0.c2) /etc/nginx(/.*)? gen_context(system_u:object_r:nginx_etc_t,s1:c0.c2) /var/log/nginx(/.*)? gen_context(system_u:object_r:nginx_var_log_t,s1:c0.c2) /var/run/nginx(/.*)? gen_context(system_u:object_r:nginx_var_run_t,s1:c0.c2) /var/www(/.*)? gen_context(system_u:object_r:nginx_var_www_t,s1:c0.c2) /var/lib/nginx(/.*)? gen_context(system_u:object_r:nginx_var_lib_t,s1:c0.c3)
      
      



, , (, , ..), . s1 (Confidential), . , . , , ( newrole -r secadm_r ), premissive ( setenforce 0 ), ( restorecon -RFvv / ), nginx sysadm_r ( run_init /etc/init.d/nginx start ). audit.log , . modname.if, , , «» :
 template(`web_server_template',` type $1_t, web_server; allow blah blah; # so we can call web_server_template(nginxN) in modname.te ')
      
      



modname.if , «» . . , , :
 root@sandbox:~# cat nginx_local.te policy_module(nginx_local, 0.0.1) ################################################################## type nginx_t; type nginx_exec_t; type nginx_initrc_exec_t; type nginx_etc_t; type nginx_var_log_t; type nginx_var_run_t; type nginx_var_www_t; type nginx_var_lib_t; corecmd_executable_file(nginx_exec_t); init_script_file(nginx_initrc_exec_t) files_type(nginx_etc_t) logging_log_file(nginx_var_log_t) files_pid_file(nginx_var_run_t) files_type(nginx_var_www_t) files_type(nginx_var_lib_t) init_ranged_daemon_domain(nginx_t, nginx_exec_t, s1:c0.c2)
      
      



corecommands.if, . — , MLS, , nginx .

, , (grep nginx /var/log/audit/audit.log | grep 'sysctl'), , , sysctl:
 # /read kernel sysctl values require { type sysctl_kernel_t; class dir { search }; class file { open read }; } allow nginx_t sysctl_kernel_t:dir { search }; allow nginx_t sysctl_kernel_t:file { open read };
      
      



socket:
 # socket bind require { type node_t; type http_port_t; class tcp_socket { name_bind setopt bind create listen node_bind }; class capability { net_bind_service setuid setgid }; } allow nginx_t http_port_t:tcp_socket { name_bind }; allow nginx_t node_t:tcp_socket { node_bind }; allow nginx_t self:tcp_socket { bind create setopt listen }; allow nginx_t self:capability { net_bind_service setuid setgid };
      
      



などなど。 audit2allow, MLS. require , , , . , -
 policy_module(nginx_local, 0.0.1) ################################################################## type nginx_t; type nginx_exec_t; type nginx_initrc_exec_t; type nginx_etc_t; type nginx_var_log_t; type nginx_var_run_t; type nginx_var_www_t; type nginx_var_lib_t; corecmd_executable_file(nginx_exec_t); init_script_file(nginx_initrc_exec_t) files_type(nginx_etc_t) logging_log_file(nginx_var_log_t) files_pid_file(nginx_var_run_t) files_type(nginx_var_www_t) files_type(nginx_var_lib_t) init_ranged_daemon_domain(nginx_t, nginx_exec_t, s1:c0.c2) # rules # /sys and /sys/devices/systemcpu/online require { type sysfs_t; class dir { search }; class file { read open }; } allow nginx_t sysfs_t:dir { search }; allow nginx_t sysfs_t:file { read open }; # /read kernel sysctl values require { type sysctl_kernel_t; type sysctl_t; class dir { search }; class file { open read }; } allow nginx_t sysctl_kernel_t:dir { search }; allow nginx_t sysctl_kernel_t:file { open read }; allow nginx_t sysctl_t:dir search; # self configs and symlinks require { type nginx_etc_t; class dir { open read search }; class file { open read getattr }; class lnk_file { read }; } allow nginx_t nginx_etc_t:dir { open read search }; allow nginx_t nginx_etc_t:file { open read getattr }; allow nginx_t nginx_etc_t:lnk_file { read }; # /etc/localtime, /etc/passwc, etc (no pun intended) require { type locale_t; type etc_t; class file { read open getattr }; } allow nginx_t locale_t:file { read open getattr }; allow nginx_t etc_t:file { read open getattr }; # pid file require { type var_run_t; class dir { search write add_name remove_name } ; class file { write read create open unlink }; } allow nginx_t var_run_t: dir { search }; allow nginx_t nginx_var_run_t: file { read write create open unlink }; allow nginx_t nginx_var_run_t: dir { search write add_name remove_name }; # libs require { type var_lib_t; class dir { search getattr }; } allow nginx_t var_lib_t:dir search; allow nginx_t nginx_var_lib_t: dir { search getattr }; # socket bind require { type node_t; type http_port_t; class tcp_socket { name_bind setopt bind create listen node_bind }; class capability { net_bind_service setuid setgid }; } allow nginx_t http_port_t:tcp_socket { name_bind }; allow nginx_t node_t:tcp_socket { node_bind }; allow nginx_t self:tcp_socket { bind create setopt listen }; allow nginx_t self:capability { net_bind_service setuid setgid }; # socket accept require { class tcp_socket { read write accept }; } allow nginx_t self:tcp_socket { read write accept }; # logs require { type var_log_t; class dir { search }; class file { open append }; } allow nginx_t var_log_t:dir { search }; allow nginx_t nginx_var_log_t:dir { search }; allow nginx_t nginx_var_log_t:file { open append }; # www require { class dir { search getattr }; class file { read getattr open }; } allow nginx_t nginx_var_www_t:dir { search getattr }; allow nginx_t nginx_var_www_t:file { read getattr open };
      
      



, .
次のようなナヌザヌずロヌルを取埗したす。
 root/sysadm_r@sandbox:~# adduser alice ...skipped... root/sysadm_r@sandbox:~# adduser bob ...skipped... root/secadm_r@sandbox:~# semanage user -a -R user_r -L s1 -r s1-s1:c0 ninjas root/secadm_r@sandbox:~# semanage user -a -R user_r -L s2 -r s2-s2:c0 aliens root/secadm_r@sandbox:~# semanage login -a -s ninjas alice root/secadm_r@sandbox:~# semanage login -a -s aliens bob # or, ninjas to supervise alice root/secadm_r@sandbox:~# restorecon -RFvv /home/ # thats all, folks.
      
      



合蚈

Funky time

さお、最埌に、スラむドがありたす。本栌的なデモンストレヌションのために、私はこの蚘事のために、NSAの隣に小さなVPSKを賌入し、その䞊で行ったすべおをすばやく完了したした。このシステムで盎接、SELinuxが䜕であるかを確認し、ルヌトの䞋に移動しおrm -rf / *を最初に入力し、あらゆる皮類のスクリプト/スプリットおよびルヌトキットを実行したす。しかし、この魅力的なこずを行う前に、仮定ず制限の䞡方の芳点から、もう䞀床調べおみたしょう。
このトレヌニングコヌスの䞀環ずしお、次のこずを行いたす。
ISにセキュリティ状態を衚す甚語があり、その説明に「抌し広げる」ず「ロヌルする」ずいう蚀葉がある堎合、これがそれです。完党な劥協ずは別にSELinuxのみです。劥協は避けられたせんが、その期間は非垞に興味深いものです。
しかし、SELinuxが意図しおいないものもありたす。぀たり


ドメむンを起動したせんでした。これは、玩具バヌゞョン0.0.2甚です。バヌゞョン0.0.1
こっち
: http://162.213.198.69
そしお、はい、別のリク゚ストは振る舞っおください。すべおのルヌトプロセスを匷制終了しお他のプロセスを劚害する必芁はありたせん;ナヌザヌはたったく1人です。

泚釈

*ティムミンチン、子守by



All Articles