NSAå šè¬ã«é¢é£ãããããã¯ãRSAã解èªããæ©èœãçèŽããã®ä»ã®ã¡ãã£ã¢ã®åŽé¢ã«ã€ããŠã¯è§ŠããŸãããèªå€§åºåãFUDãããã¯ãããžãŒããããŸããã ããŸããŸãªã¬ãã«ã®ã¢ã¯ãã£ããã£ã§ããŸããŸãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããMLSã®äžå¿ã«æ¡ä»¶ãè¿œå ããè匱æ§ãå°å ¥ãïŒééããç¯ãïŒããã®åŸããã¹ã
ã§ãããããŸã èå³ããããå€ãã®ãã¿ãã¬ã®ãã¡ã®1ã€ã«1é±é座ãããšãæããªããªãã
äºå枬å®å€
ã€ãŸãããæ°ã«å ¥ãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãä»®æ³ç°å¢ã«å±éããã®ã«ååãªLinuxã®çµéšããã§ã«ãããšããããšã§ãã ç§ã¯Debianã®äŸã§ãã¹ãŠãè¡ããŸããããã®ãã¹ãç¹°ãè¿ãããšã«æ±ºããå Žåãããã¯ãã¹ãŠãæã䟿å©ã§äœ¿ãæ £ããé åžãããã§è¡ãããšãã§ããŸãïŒãããŠéåžžã«å¿ èŠã§ãïŒ-ãã®éçšã§ãããªãã¯ããã«ã€ããŠå€ããåŠã³ãŸãã 誰ã§ã段éçã«ç¹°ãè¿ãããšãã§ããããã«ããã®èšäºãææãšããŠæžããŸããã ãŸããè±èªã§æè¡ææžãèªãããšã¯é£ãããªãããšãæå³ããŸã-ãã·ã¢èªã®SELinuxã«é¢ããæ å ±ã¯ãŸã ã»ãšãã©ãããŸãããäžè¬çãªæè¡æ å ±
SELinuxãããããããã¯éåžžã«å€ãããã玹ä»ããªã¥ãŒã ãã©ãã»ã©å°ãããã«ã¯é©ãã§ãããããªã³ã¯ã¯3ã€ã ãã§ãã- RHã¬ã€ã ïŒæ確ã§ãªãããŒã ãããå Žåããã®äžã«èª¬æãèŠã€ããå¯èœæ§ãé«ãã§ãã 䟿å©ãªå¥ã®ã¿ãã§éããŸãã
- Eli Billauerã«ããè¬çŸ©ã®èŠçŽ ïŒãããäºå®ã®äž»èŠãªã³ã¬ã¯ã·ã§ã³ãšèããŠãã ããã ãããããäœãäœã§ãããããã°ããç解ããGoogleã«äœãå°ããããæ£ç¢ºã«ç¥ãããšãã§ããŸãã
- ããªã·ãŒã®äœæ ã 10幎åã®ããã¥ã¡ã³ãã«ãããããããå éšããã€ã¹SELinuxãç解ããã®ã«ååãªããŒãã€ã³ããšããã®éžææ¹æ³ã«ã€ããŠèª¬æããŠããŸãã
ããã¯ãã»ããã¢ãããé²ããåã«èªãããšããå§ãããäž»ãªãã®ã§ããããããªããšããããã®ããã¥ã¡ã³ãã«åžžã«æ»ãããšã«ãªããŸãã ä»ã«ãå€ã ã® ãªãœãŒã¹ããããŸãããããŒã«å€æ°ããªã³/ãªãã«ãã以å€ã®ããšããããå Žåã¯ãééããªããããã«å°éããŸãã
ãããã£ãŠãããããã¹ãŠãèªããšãç°¡åãªè³ªåã§èªåèªèº«ããã¹ãã§ããŸãã
- unconfined_t / unconfined_uãšã¯äœã§ããïŒãŸããªãSELinuxããã¹ãã§ããªãã®ã§ããïŒ
- ç¹æ®ãªã±ãŒã¹ãMLSãŸãã¯MCSãšã¯äœã§ããïŒ
- * .teãš* .ifã®* .fcã®éãã¯äœã§ããïŒ
çã
- ç¡å¶éã®ãã¡ã€ã³/ãŠãŒã¶ãŒã åãæåãåããŠãå¥ã®ãã·ã³ã§SELinuxãæ§æã§ããŸãã
- MCSã MLS == MCS with MLS_SENS = 1
- åºæ¬çã«-äœããããŸããã txtã®æžã蟌ã¿ã§ã¯ãã¡ã€ã³ã®Makefileãä¿®æ£ããããšãå¿ããªãã§ãã ããã
åé¡ã¹ããŒãã¡ã³ããšäºåèšå®
æ¢ã«äœã欲ããã®ãã¯ããã£ãŠããããã©ã®ããã«å®è£ ããã®ãããããªãã®ã§ãå®éšã®ç®æšãå®åŒåã§ããŸãã- SELinux MLSãèšå®ãããïŒãããåã蟌ãã ã®ã§ãæ倧éã«
掻çšããŠããªããžããªããæºåãã§ããŠããªãnext-> next->åæïŒ; - RefPolicyãåºç€ãšããŠäœ¿çšããããšèããŠããŸã ã
- ããŠããã®åŸãææªã®ã·ããªãªã確èªããŸã-å£ããã ãã§ãªããUID = 0ã«ãªã£ãã ãã§ãªããäžå®ã®ã·ã§ã«ã¢ã¯ã»ã¹ã§ãã«ãŒããuser_uã«åãããããã®ãå¿ããŸããã ç§ã¯æå³çã«ãã®ãããªä»®å®ãããã€ãè¡ããŸããææªã®ã·ããªãªãæ€èšããŸãã
- æäœéå¿ èŠãªã³ããŒãèšå®ããŸããããããªããšãèšäºã§ã¯ãªããçŽ500ããŒãžã®ãµã¬ã«ãªããŸãã
ãµãŒããŒ
ããªãã®èš±å¯ãåŸãŠããã¿ãã¬ã®äžã«çœ®ããŸãã 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)
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ãæå¹ã«ããŸãïŒã¯ãããã®ãããã¯æå³ãããŠããŸãïŒïŒïŒ .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ãæåã®ç¥ãåãã
ãµãŒããŒã®æºåãæŽãããã«ãã·ã¹ãã ã®æºåãæŽããåç §ããªã·ãŒãèªã¿èŸŒãŸããŸãããããã§ã楜ããéšåãéå§ã§ããŸãã ïŒãã®æ®µéã§ãèšäºã®æ¢åã®ããªã¥ãŒã ãè©äŸ¡ãããšãå·éãªèãã¯ãããæåã®ã¢ã»ã³ããªã§ã¯ããã©ã¡ãŒã¿ãŒã決å®ããŸããããããéžæããŸããã
$ 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ã®å ŽåïŒå ¥åŠã¬ãã«ã衚瀺ãããããããäœãå Žåã¯ãã«ãŒã«ãèŠãããšãããŸããã ïŒ
1. whoïŒscontextïŒ-whereïŒtcontextïŒ-whoïŒclassïŒ-whyïŒcallïŒïŒããã«ãMLSã®å ŽåïŒå ¥åŠã¬ãã«ã衚瀺ãããããããäœãå Žåã¯ãã«ãŒã«ãèŠãããšãããŸããã ïŒ
å¿ èŠãªèšå®ããã¹ãŠäœæããå¿ èŠã«å¿ããŠç·šéããŸãïŒ make conf æåã«ãç»å Žããããªã·ãŒ/modules.confãç·šéããŠä¿®æ£ããŸã-contribã°ã«ãŒãã®ã»ãšãã©ãã¹ãŠã®ã¢ãžã¥ãŒã«ãç¡å¹ã«ããŸããïŒmodulename = offïŒã ããã«ãããéãã¢ã»ã³ããªãããå°ãªãã¢ãžã¥ãŒã«ã ãã€ãã¹-ã³ã³ããã¹ãã®éå°è©äŸ¡ã®å¯èœæ§ã äŸã§èª¬æããŸãã
- ã³ã³ããã¹ã/ dev / xconsoleã¯ããã®ã³ã°ã«é¢é£ããŠããŸãããxserverã¢ãžã¥ãŒã«ã§å®çŸ©ãããŠããŸãã
- ç¡å¹ã«ãããšãã³ã³ããã¹ãã¯ãã£ã¬ã¯ããª/ dev /ããç¶æ¿ããå§ããŸããã
- ãããŠãé«ã確çã§ã/ dev / xconsoleã«æžã蟌ã¿ãããã¹ãŠã®ãã®ãRefPolicyã§èæ ®ãããããã«å£ããŸããã æ£è§£-éžæïŒxserââverã¢ãžã¥ãŒã«ãæå¹ã«ããããããŒã«ã«ã¢ãžã¥ãŒã«ã®ã³ã³ããã¹ããåå®çŸ©ããŸãã
contrib_off
modules.confã®ç·šéãéå§ãããšããã«ããªã¿ãŒã³ã®ãªããã€ã³ããééããŸããããã®åŸãäœãããŠããŠããªããªã®ããç解ããå¿
èŠããããŸãã ã³ã³ããã¹ãã®èª€è§£ã¯ãã·ã¹ãã ãã¢ã¯ã·ã§ã³ã«äžãã圱é¿ã®æåã®äŸã«ãããŸããã
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
ä»åŸããã°ããã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ãšã¯äœã§ããïŒãã ãããã®ãã€ã³ãã«å°éããå Žåã¯è¯ãããšã§ãã ããã¯ãŸãã«ç§ãã¡ãå¿ èŠãšããæ¯ãèãã§ãããä»ã§ã¯ãªããããç§ãã¡ãèš±ããªãã®ããç解ãå§ããã§ãããã
ç°¡åã«èšããšãèš±å¯ãéç¥ãããã·ã³ã¯æåŠãããŸãã
æ°åã®ãã¥ãªã®æ¬è³ªãä»åºŠã¯æªãé¡æšãªã
ãããç§ã¯ãã®ç¬éããå§ããŠãsshã ãã§ãªããµãŒããŒã«ã¢ã¯ã»ã¹ããå¿
èŠããããšèšãã®ãå¿ããŠããŸããã 幞ããªããšã«ããã®å Žåã¯ä»®æ³ãµãŒããŒã§ãããåžžã«VNC / SPICE /ãªã©ïŒFSKNã®ãªã³ã¯ã¹ãã·ã£ãªã¹ãïŒããããŸãã ç§ãã¡ã¯ããŒã«ã«ã«å
¥ãããšããŸã-ããã¯ãããèš±å¯ããŸããã ããããã©ã®ããã«ããã«èª¬æããã®ã«æé©ãªç¶æ³ äºåã®ããã¥ã¡ã³ãã泚ææ·±ãèªãã å Žåãããããææ決å®æé ãèŠããŠããã§ãããã
- æåã«DACã çŠæ¢ãããŠããå Žåã¯ãSELinuxã«ã¢ã¯ã»ã¹ããããšããã§ããŸãããèš±å¯ãæåŠãããã®ã¯æ®éã§ãUnixã§ãããæåã®* nixã·ã¹ãã ã«ç²Ÿéãããšãããç§ãã¡å šå¡ã«éŠŽæã¿ããããŸãã
- ãã®åŸãMACã äžèŽããèš±å¯ãèŠã€ãããªãå ŽåãæåŠãããèš±å¯ã¯ãã§ã«SELinuxããã®ãã®ã§ãã äžéšã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ïŒRHïŒã§ã¯ãã SELinux is prevent ããå«ãè¡ããã°ã«è¡šç€ºãããŸãããäžéšã¯è¡šç€ºãããŸãããããã¹ãŠãaudit.logã«èšé²ãããŸãã
åºããã
ãã®æ®µéã§ãaudit.logã«ã¯- ãããã¯ã«ãªããªãã§ãã ããã
- åèµ·åããŸã-ããšãã°ãCtrl + Alt + Delãéä¿¡ãããšãacpidããã¹ãŠãè¡ããŸãã
- ããŒã段éã§grubããã£ããããselinux = 1ãselinux = 0ã«å€æŽããŸã
- ããŒãããrootã«ãªããŸãã
cp /var/log/audit/audit.log /root wc -l /root/audit.log 195
çœå®³ã®èŠæš¡ã¯å°ããã200è¡ã§ãã ãã£ãããšå±±ãäžãæã§ãã - ãã°ã®èªã¿æ¹
type=DAEMON_START msg=audit(1383338997.597:1957): auditd start, ver=2.3.2 format=raw kernel=3.10.17-vm-slnx auid=4294967295 pid =1319 subj=system_u:system_r:auditd_t:s3:c0.c31 res=success
圌ãã¯ããã«ã€ããŠããã«æ²é»ããããã«é Œã¿ãŸãããtype=SYSCALL msg=audit(1383338997.620:219): arch=40000003 syscall=102 success=no exit=-13 a0=3 a1=afbe1c10 a2=a779b000 a3=ffffffc8 items=0 ppid=1338 pid=1346 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=4294967295 tty=(none) comm="acpid" exe="/usr/sbin/acpid" subj=system_u:system_r:initrc_t:s0-s3:c0.c31 key=(null)
å¿ãåãããã®ãªããªã-圌ã¯ã©ã®ãœã±ããã«åããã®ãïŒ*
type=AVC msg=audit(1383338997.810:233): avc: denied { search } for pid=1470 comm="restorecond" name="/" dev="tmpfs" ino=376 scontext=system_u:system_r:restorecond_t:s0-s3:c0.c31 tcontext=system_u:object_r:var_run_t:s3:c0.c31 tclass=dir
ãªã©ãªã©ã ã芧ã®ãšããããããã®ãã°ã«ã¯è€éãªãã®ã¯ãããŸããã SELinuxã¯å®æ§çã«é£ãããªãã å®éåããããšãé£ãããæåã¯ç°åžžã§ããããã以äžã®ããšã¯ãããŸããã ç¹°ãè¿ããŸãããäœãæ確ã§ãªãå Žåã¯ããã€ã§ãéäººæ ŒçãªæååãGoogleã«å ¥åãããã ããã§æ€çŽ¢ã§ããŸã ããã®ããããã°ãèªã¿åã£ãŠç解ã§ããããã«ãªããŸããã
*æšæž¬ããã€ããã¯ãããŸãããã³ã¡ã³ããæžããŠãã ããã - ä¿®æ£æ¹æ³æ¬¡ã®2ã€ã®äž»ãªãªãã·ã§ã³ããããŸãã
- ç¡å¹ãªã³ã³ããã¹ã
- èš±å¯ã«ãŒã«ã®æ¬ åŠ
3çªç®ã®ãªãã·ã§ã³ã¯ãã£ãã«èŠãããŸããããæãæçœã§ã¯ãããŸããããMLSå¶éã®éåïŒããªã·ãŒå¶çŽéåïŒã§ãããã®å Žåã«èš±å¯ã«ãŒã«ãè¿œå ããŠãå¹æã¯ãããŸãããMLSã®äžå¿ã«ç§»åããŠå¶éãç·šéããå¿ èŠããããŸãã ããã§ã¯ã ãªããã¹ãŠã®å€æŽãè¡ãããŠããã®ã ã ãªãè¡ãããŠããã®ã ã äœãæ£ç¢ºã«æ±ºå®ãã¹ããªã®ããå®å šã«ç解ããŠããè¡ãå¿ èŠããããŸãã 軜çãªå€æŽã«ãããã»ãã¥ãªãã£ã¬ãã«ãäœäžããããšãä¿èšŒãããŠããŸãã ããªãã¯ïŒåã³ïŒèŠåãåããŸããã
ãã£ã³ãã¹ã¯ããã®è§£æ±ºæ¹æ³ã«ã€ããŠã®ãã®ã§ããããµã€ãºã®ããã«åãçµã¿ãŸãïŒ- ééã£ãã³ã³ããã¹ããœãªã¥ãŒã·ã§ã³ç¡å¹ãªã³ã³ããã¹ãã®äŸïŒ
root@sandbox:~# ls -laZ /lib/systemd/systemd-udevd -rwxr-xr-x. 1 root root system_u:object_r:bin_t:s0 210380 Sep 23 12:24 /lib/systemd/systemd-udevd @local$ grep systemd-udevd custom/policy/ -R custom/policy/modules/system/udev.fc:/usr/lib/systemd/systemd-udevd -- gen_context(system_u:object_r:udev_exec_t,s0)
root@sandbox:~# semanage fcontext -m -t udev_exec_t /lib/systemd/systemd-udevd # try to modify /usr/sbin/semanage: File context for /lib/systemd/systemd-udevd is not defined root@sandbox:~# semanage fcontext -a -t udev_exec_t /lib/systemd/systemd-udevd # ok, add root@sandbox:~# grep udev /etc/selinux/custom/contexts/files/file_contexts.local /lib/systemd/systemd-udevd system_u:object_r:udev_exec_t:s0
- èš±å¯ã«ãŒã«ã®æ¬ åŠã®è§£æ±ºçããšãã°ã次ã®è¡ãã芧ãã ããã
type=AVC msg=audit(1383338997.860:251): avc: denied { module_request } for pid=1524 comm="sshd" kmod="net-pf-10" scontext=system_u:system_r:sshd_t:s0-s3:c0.c31 tcontext=system_u:system_r:kernel_t:s3:c0.c31 tclass=system
root@sandbox:~# audit2allow -Rev -i /root/log require { type kernel_t; type sshd_t; class system module_request; } #============= sshd_t ============== # audit(1383338997.860:251): # scontext="system_u:system_r:sshd_t:s0-s3:c0.c31" tcontext="system_u:system_r:kernel_t:s3:c0.c31" # class="system" perms="module_request" # comm="sshd" exe="" path="" # message="type=AVC msg=audit(1383338997.860:251): avc: denied { # module_request } for pid=1524 comm="sshd" kmod="net-pf-10" # scontext=system_u:system_r:sshd_t:s0-s3:c0.c31 # tcontext=system_u:system_r:kernel_t:s3:c0.c31 tclass=system " allow sshd_t kernel_t:system module_request;
- äœãèµ·ãã£ãŠããã®ïŒ sshdã¯ãã¢ãžã¥ãŒã«ãã«ãŒãã«ã«ããŒãããããèŠæ±ããŸããã ããããŸãããnet-pf-10ã¯ããŸãå¿ èŠãããŸããã ipv6ã¯ãããŸããã
- ç§ãã¡ã«äœãæäŸãããŸãããïŒ sshd_tãã¡ã€ã³ãã¢ãžã¥ãŒã«ãã«ãŒãã«ã«ããŒãã§ããããã«ããŸãã ãã¡ãããèš±å¯ããã°ããã®ãããªééãã¯ãããŸããã ãããŠããã圌ãæµã®ã¢ãžã¥ãŒã«ãèŠæ±ãããïŒ
- 圌ãã¯ã€ã³ã¿ãŒãããäžã§äœãæžããŠããŸããïŒ ãžãž ã ãããããããšã«ããã®æ©èœã解決ããããã«ããŒã«å€æ°ã¯å¿ èŠãããŸããã
- äœããŠãã®ïŒ ã¯ããsshdããã®æ¹åã«ç©gãããããšãçŠæ¢ãã圌ããäžãããã®ã«äœçšãããŸãã ipv6ãå¿ èŠãªå Žåã¯ãsshãéå§ããåã§ãã£ãŠãããããèªåã§ããŠã³ããŒãããŸãã
mkdir policy/modules/local && cd policy/modules/local echo '<summary>Local layer -- differences from reference policy.</summary>' > metadata.xml echo '## <summary>sshd local policy</summary>' > sshd_local.if echo '## no file contexts redefined here' > sshd_local.fc cat > sshd_local.te <<EOF > policy_module(sshd_local, 0.0.1) > ################################################################## > require { > type kernel_t; > type sshd_t; > class system module_request; > } > #============= sshd_t ============== > # dont audit requests for module load > # NOTE: this may hide some denials in the future > dontaudit sshd_t kernel_t:system module_request; > > EOF
modules.confã§ã¢ãžã¥ãŒã«ãæå®ããããªã·ãŒãåéããŠãµãŒããŒã«ã¢ããããŒãããŸããroot@sandbox:/tmp# sesearch --allow -s sshd_t -t kernel_t | grep system root@sandbox:/tmp# sesearch --dontaudit -s sshd_t -t kernel_t | grep system root@sandbox:/tmp# dpkg -i selinux-policy-custom_0.0.1_all.deb (Reading database ... 20371 files and directories currently installed.) Preparing to replace selinux-policy-custom 0.0.1 (using selinux-policy-custom_0.0.1_all.deb) ... Unpacking replacement selinux-policy-custom ... Setting up selinux-policy-custom (0.0.1) ... root@sandbox:/tmp# sesearch --dontaudit -s sshd_t -t kernel_t | grep system dontaudit sshd_t kernel_t : system module_request ; root@sandbox:/tmp# semodule -l | grep sshd_local sshd_local 0.0.1
- MLSå¶éã®ãœãªã¥ãŒã·ã§ã³ããã«åé¡ããããŸãïŒãã¿ãã¬ã®ã¬ãã«ã¯9000以äž!! 1ã€ïŒïŒåé¡èª¬æã¯æ¬¡ã®ãšããã§ãã
type=AVC msg=audit(1383338997.630:221): avc: denied { sendto } for pid=1351 comm="acpid" path="/dev/log" scontext=system_u:system_r:initrc_t:s0-s3:c0.c31 tcontext=system_u:system_r:syslogd_t:s3:c0.c31 tclass=unix_dgram_socket type=SYSCALL msg=audit(1383338997.630:221): arch=40000003 syscall=102 success=no exit=-13 a0=3 a1=afbe15d0 a2=a779b000 a3=ffffffc8 items=0 ppid=1 pid=1351 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=4294967295 tty=(none) comm="acpid" exe="/usr/sbin/acpid" subj=system_u:system_r:initrc_t:s0-s3:c0.c31 key=(null)
decriptionæ¢åã®ã«ãŒã«ã¯æ¬¡ã®ãšããã§ããroot@sandbox:~# audit2allow -Rev -i /tmp/x require { type syslogd_t; type initrc_t; class unix_dgram_socket sendto; } #============= initrc_t ============== # audit(1383338997.630:221): # scontext="system_u:system_r:initrc_t:s0-s3:c0.c31" tcontext="system_u:system_r:syslogd_t:s3:c0.c31" # class="unix_dgram_socket" perms="sendto" # comm="acpid" exe="" path="" # message="type=AVC msg=audit(1383338997.630:221): avc: denied { sendto } for # pid=1351 comm="acpid" path="/dev/log" # scontext=system_u:system_r:initrc_t:s0-s3:c0.c31 # tcontext=system_u:system_r:syslogd_t:s3:c0.c31 tclass=unix_dgram_socket "#!!!! This avc is a constraint violation. You will need to add an attribute to either the source or target type to make it work. #Constraint rule: # Possible cause source context and target context 'level' differ allow initrc_t syslogd_t:unix_dgram_socket sendto;
sesearchã芧ã®ãšããã解決èŠåã¯ãã§ã«ååšããŠããŸãã ããã«ãMLSããŒãžã§ã³ã§ã¯ãªãããã®ã¢ã¯ã»ã¹ã¯èš±å¯ãããŸããroot@sandbox:~# sesearch --allow -s initrc_t -t syslogd_t -c unix_dgram_socket Found 2 semantic av rules: allow initrc_t syslogd_t : unix_dgram_socket sendto ; allow unconfined_domain_type domain : unix_dgram_socket { ioctl read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto recv_msg send_msg name_bind } ;
ãªããããã¯è§£æ±ºçã ç®çã®å¶éãèŠã€ãããŸããïŒåæã«ãå¶éã®ãªããã¡ã€ã³ã®çŸãããç解ã§ããŸãã 圌ã¯ãç¡å¶éãã§ããããããã¹ãŠãå¯èœã§ãã ãã®ãããstrict以å€ã§SELinuxããã¹ãããããšã¯ããŸãæå³ããããŸããã ãããŠãããšãå³å¯ã§ã¯ããããã¹ãæžã¿ã®ãªããžã§ã¯ããããå Žåã§ããäžè¬çã«ãSELinuxã®å¿ èŠæ§ãšä¿¡é Œæ§ã«ã€ããŠçµè«ãåºãã®ã¯ææå°æ©ã§ããmlsconstrain unix_dgram_socket sendto (( l1 eq l2 ) or (( t1 == mlsnetwriteranged ) and ( l1 dom l2 ) and ( l1 domby h2 )) or (( t1 == mlsnetwritetoclr ) and ( h1 dom l2 ) and ( l1 domby l2 )) or ( t1 == mlsnetwrite ) or ( t2 == mlstrustedobject )); # scontext=system_u:system_r:initrc_t:s0-s3:c0.c31 # tcontext=system_u:system_r:syslogd_t:s3:c0.c31
- äœãã¢ã¯ã»ã¹ã¬ãã«t1ãt2ã®ã¢ã¯ã»ã¹ã¬ãã«ãšçããïŒs0ïŒ= s3ïŒããŸãã¯
- t1 mlsnetwriteranged (, seinfo -amlsnetwriteranged -x ), ,
- t1 mlsnetwritetoclr (, ),
- t1 mlsnetwrite (, setrans_t),
- t2 mlstrustedobject (, syslogd_t , devlog_t)
root@sandbox:~# ls -laZ /dev/log srw-rw-rw-. 1 root root system_u:object_r:devlog_t:s3:c0.c31 0 Nov 1 23:06 /dev/log
root@sandbox:~# ps -auxZ | grep [r]syslog system_u:system_r:syslogd_t:s3:c0.c31 root 1338 0.0 0.3 30784 972 ? Ssl Nov01 0:00 /usr/sbin/rsyslogd
$ grep '' syslogd_local.* syslogd_local.fc:# no file contexts redefined here syslogd_local.if:## <summary>syslogd local policy</summary> syslogd_local.te:policy_module(syslogd_local, 0.0.1) syslogd_local.te:################################################################## syslogd_local.te:require { syslogd_local.te: type syslogd_t; syslogd_local.te:} syslogd_local.te: syslogd_local.te:#============= syslogd_t ============== syslogd_local.te:# mark syslogd_t as mlstrustedobject syslogd_local.te:# this is possible security hole, TODO: get some heavy brain augmentation and investigate syslogd_local.te:mls_trusted_object(syslogd_t);
- ä¿®æ£ãããã®, . , permissive (/etc/selinux/config), , audit.log c , , newrole, ssh. enforcing, . auditd ssh:
root@sandbox:~# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: custom Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: denied Max kernel policy version: 28 root@sandbox:~# cat /var/log/audit/audit.log type=DAEMON_START msg=audit(1383360996.062:2774): auditd start, ver=2.3.2 format=raw kernel=3.10.17-vm-slnx auid=4294967295 pid=1278 subj=system_u:system_r:auditd_t:s3:c0.c31 res=success type=CONFIG_CHANGE msg=audit(1383360996.180:20): audit_backlog_limit=320 old=64 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditctl_t:s0-s3:c0.c31 res=1 type=LOGIN msg=audit(1383361036.430:21): login pid=1568 uid=0 old auid=4294967295 new auid=0 old ses=4294967295 new ses=1 type=LOGIN msg=audit(1383361038.410:22): login pid=1571 uid=0 old auid=4294967295 new auid=0 old ses=4294967295 new ses=2 root@sandbox:~# id -Z root:secadm_r:secadm_t:s0-s3:c0.c31
ãããã£ãŠããã¹ãŠã®ã»ããã¢ãããå®äºããã·ã¹ãã ã¯åŒ·å¶ã¢ãŒãã§èµ·åããŸãããã®æç¹ã§ãååãšããŠã泚ææ·±ãèªè ã¯ãã§ã«ã¢ãžã¥ãŒã«åã®åºç¯ãªç¥èãæã¡ãæ¿æ²»ã®æ§é ã«å ªèœã§ãããm4æ§æãå¿ããæããŠããŸãïŒãŸãã¯çã«å«ãã§ã¯ãããŸããïŒã ã
ææžã«ããŸãèšèŒãããŠããªãããããå°ãé åãæ·±ãæãäžãããšãã§ãã
Mls
, , , , (c (PDF) (PDF), ), , . MLSæ¢åã®SELinuxå¶éã«ãåçŽïŒã¬ãã«ïŒãšæ°Žå¹³ïŒã«ããŽãªïŒã®2ã€ã®ã¬ãã«ã®å¶åŸ¡ãè¿œå ããŸãã1ã€ç®ã¯ã蚱容å€ãã«éããã蚱容å€ãé«ãã»ã©éšäžãžã®ã¢ã¯ã»ã¹ãæå³ããŸãïŒããããã·ãŒã¯ã¬ãããã¯ãã·ãŒã¯ã¬ããããšããŒã¯ãããããã¥ã¡ã³ããèªã¿åãããšãã§ããŸãïŒã2ã€ç®ã¯åãã¬ãã«ã®ç°ãªãã«ããŽãªã§ããæ®ããèªãèš±å¯ãæå³ãããã®ã§ã¯ãããŸããããããã®äž¡æ¹ã®ã¬ãã«ã®å¶åŸ¡ã¯ãSELinuxãåäœããä»»æã®ãªããžã§ã¯ãã«å²ãåœãŠãããšãã§ãããããããã«ãããæ å ±ãšãã®ãããŒã®åé¡ã«é¢ããã»ãšãã©ãã¹ãŠã®èŠä»¶ãå®è£ ã§ããŸãã
- éå±€ã¢ã¯ã»ã¹ãTopSecret-> Secret-> Unclassifiedããã¹ãŠã®ãªããžã§ã¯ããå®å šãªãªã¹ãã¯ãflaskãã£ã¬ã¯ããªã«ãããŸãã
- ããŒã¿ããŒã¹å ã®ãã¡ã€ã«ãšãããã¯ãŒã¯æ¥ç¶ãŸãã¯ããŒãã«ã®äž¡æ¹ã«ããŒã¯ãä»ããŸãã
- ã·ã¹ãã ã®ãŠãŒã¶ãŒæš©éã«é¢ä¿ãªããããäœãã¬ãã«ãžã®æ å ±æŒããã®é²æ¢ã
- ãã¹ãŠã®ãŠãŒã¶ãŒïŒã«ãŒããå«ãïŒã«å¯Ÿããããã©ã«ãã®ã¢ã¯ã»ã¹å¶éãèªèšŒã«å¿ããŠããŒã«ãããã«åºå¥ãããŸãã
- ãŸããã·ã¹ãã ã®99ïŒ ã®ãã®ä»ã®éå°ã
ãŸãã
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 , :
, , (grep nginx /var/log/audit/audit.log | grep 'sysctl'), , , sysctl: , .
/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.
åèšïŒ - äž¡æ¹ã®ãŠãŒã¶ãŒã¯ãæäœã¬ãã«ä»¥äžã®ãã£ã¬ã¯ããªã«ããŒã¿ãæžã蟌ãããšã¯ã§ããŸããã
- äž¡æ¹ã®ãŠãŒã¶ãŒã¯ã蚱容ã¬ãã«ãè¶ ãããªããžã§ã¯ãããèªã¿åãããšã¯ã§ããŸããã
- äž¡æ¹ã®ãŠãŒã¶ãŒã¯ã«ããŽãªã«ãã£ãŠå¶éãããŠããŸããä»ã®ãã¡ã€ã³ãèªã¿åãããã®ã¢ã¯ã»ã¹èš±å¯ã«ãŒã«ãè¿œå ãããšãã«ããŽãªc0ã®ãã¡ã€ã«ã®ã¿ãèªã¿åãããšãã§ããŸãã
- root , ;
- - SELinux ID, alice, ( DAC ) ;
- , , core â s0, â s1.
Funky time
ããŠãæåŸã«ãã¹ã©ã€ãããããŸããæ¬æ Œçãªãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ããã«ãç§ã¯ãã®èšäºã®ããã«ãNSAã®é£ã«å°ããªVPSKãè³Œå ¥ãããã®äžã§è¡ã£ããã¹ãŠããã°ããå®äºããŸããããã®ã·ã¹ãã ã§çŽæ¥ãSELinuxãäœã§ãããã確èªããã«ãŒãã®äžã«ç§»åããŠrm -rf / *ãæåã«å ¥åããããããçš®é¡ã®ã¹ã¯ãªãã/ã¹ããªããããã³ã«ãŒãããããå®è¡ããŸãããããããã®é åçãªããšãè¡ãåã«ãä»®å®ãšå¶éã®äž¡æ¹ã®èŠ³ç¹ãããããäžåºŠèª¿ã¹ãŠã¿ãŸãããããã®ãã¬ãŒãã³ã°ã³ãŒã¹ã®äžç°ãšããŠã次ã®ããšãè¡ããŸãã
- 誰ã§ããµãŒããŒãžã®ã«ãŒãã¢ã¯ã»ã¹æš©ãååŸãããšèããŠããŸãã
- 圌ã¯sshçµç±ã§ãã°ã€ã³ãã察話åã·ã§ã«ãå®è¡ã§ãããšèããŠããŸãã
- Russell Cokerããã¬ã€ãã·ã³ã§è¡ã£ãããã«ãã«ãŒãã¯user_uã§ã€ã³ã¹ã¿ã³ã¹åãããªããšèããŠããŸãããã¡ããããã®ä»®å®ã¯æ¬çªç°å¢ã§ã¯æšå¥šãããŸããïŒãã¡ããã以åã®ãã¹ãŠã®äŸãšåæ§ã«:-)
- ã«ãŒãã«ãã«ã¹ã¿ãã€ãºããªãã£ããšæããŸãïŒgrsecã¯ãããŸãããèšäºãšãã¹ãã«ãããå«ããªãããšã«ããŸããïŒ
- ãã¡ã€ã¢ãŠã©ãŒã«ã¯ã»ãšãã©ãªããšèããŠããŸãã
ããããSELinuxãæå³ããŠããªããã®ããããŸããã€ãŸãïŒ
- SELinux . :(){ :|:& };: . fork bombs, - â ; , , â â , .
- SELinux . . , SELinux iptables â , . , SELinux, :-)
- ãµãŒããŒãæå°æ§æã§æ€èšããŸããã³ã³ãã€ã©/ãããã¬ãŒã¯ãªããéåžžã¯prodã§ã¯çºçããŸãããMLS Play Machineã®ãã«ããŒãžã§ã³ã¯ãVPSã§ã¯ãªããããå¶åŸ¡ãããã€ã³ãã©ã¹ãã©ã¯ãã£ã«å±éãããšãã«åŸæ¥ãªãªãŒã¹ãããŸããããããscpããããŸã-äœãé¢çœããã®ãã³ããŒã§ããŸãã
- ãããŠãã¯ããSELinuxãéçºããçµç¹ã®æé«ã®äŒçµ±ã§ã¯ãã³ã³ãœãŒã«ã®èšé²ããµãŒããŒã§åæã«ãã¹ããããŠããŸã:-)ãããŠãããªãã¯NSAãã¢ãªãŸããArea51ãè¿ãã«ãããããã«ã«ãŒãã¢ã¯ã»ã¹ãããããšãç解ããŠããŸããæ¥ã«è»ãç§ã®CPUã«æŒã蟌ãŸããŸããã¬ã³ãŒããåé€ããŸã-ããªããçŽ æŽããã仲éã§ãããã³ã¡ã³ããæžããŠãã ããã
- 0day-ããªãã®è£éã§ãããããããã¢ããããå Žåãç§ã¯ç¢ºãã«ãäžèŸã«ãªããŸãããšã¯ãããç§ã¯èª°ã«èšã£ãŠããã®ã:-)
ãã¡ã€ã³ãèµ·åããŸããã§ãããããã¯ãç©å ·ããŒãžã§ã³0.0.2çšã§ããããŒãžã§ã³0.0.1
ãã£ã¡
ãããŠãã¯ããå¥ã®ãªã¯ãšã¹ãã¯æ¯ãèã£ãŠãã ããããã¹ãŠã®ã«ãŒãããã»ã¹ã匷å¶çµäºããŠä»ã®ããã»ã¹ã劚害ããå¿
èŠã¯ãããŸãã;ãŠãŒã¶ãŒã¯ãŸã£ãã1人ã§ãã
: http://162.213.198.69