Composants de bases UNIX pour macOS
 >  2019 , Système , Défendre et protéger






macOS est un UNIX-like, et possède des mécanismes de sécurité en commun avec ses compères GNU/Linux et *BSD. Seulement contrairement à ceux-ci, les mise à jour système ne prennent que très rarement en compte les composants UNIX de base liés à la sécurité, tels que LibreSSL, OpenSSH, Sudo et cURL. Cet article propose alors de mettre à jour ces composants via des scripts permettant leur automatisation.





0x00. CONTEXTE



Ces programmes seront téléchargés et compilés dans /usr/local/src.
Pour leur installation dans le chemin par défaut, /usr, il faudra désactiver SIP via la commande depuis le démarrage en mode rescue (appuyer sur ALT+R à l’allumage) :


csrutil disable

Voici les liens de téléchargements :

Télécharger *sudo* sur https://www.sudo.ws/download.html
Télécharger *libressl* sur http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/
Télécharger *openssh* sur http://ftp.fr.openbsd.org/pub/OpenBSD/OpenSSH/portable/





0x01. SUDO


Téléchargement :


url=”$(curl -s 'https://www.sudo.ws/download.html' \
        |grep tar.gz\
        |head -n1\
        |cut -d'”' -f2)ver=”$(basename$url)”
curl ”$url-o$ver”
 

Installation :


 
sudo port install libssh2 brotli
 
ln -s /opt/local/include/brotli /usr/local/include/
ln -s /opt/local/include/*ssh*  /usr/local/include/
ln -s /opt/local/include/*ssl*  /usr/local/include/
 
./configure \
  --prefix=/usr \
  --bindir=/usr/bin \
  --libexecdir=/usr/libexec \
  --sysconfdir=/etc \
  --with-plugindir=/usr/libexec/sudo \
  --enable-asan \
  --with-timeout \
  --with-tty-tickets \
  --with-all-insults \
  --with-man \
  --with-env-editor \
  --with-mdoc \
  --with-password-timeout \
  --with-timeout \
  --with-pam \
  --with-pam-login \
  --with-rundir=/var/db/sudo \
  --with-env-editor \
  --with-pam \
  --with-libraries=bsm \
  --with-password-timeout=0 \
  --enable-asan \
  --enable-pie \
  --disable-setreuid \
  --without-lecture \
  --enable-static-sudoers 2>configure.err \
   && make 2>make.err && make install 2>make_install.err
 
# Pour être sur de pointer sur la version de curl tout juste installée
echoalias curl='/usr/bin/curl'>> ~/.bashrc
 
 




0x02. LIBRESSL


Téléchargement :


ver=$(curl -s 'http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/'\
       |grep -vi beta \
       |egrep -o ”libressl-[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}(-[a-z]+)?.tar.gz” \
       |sort -u \
       |tail -n1)
curl ”http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/$ver-o $ver
 

Installation :


./configure \
  --prefix=/usr \
  --sysconfdir=/usr/etc \
  --with-ssl-engine \
  --with-pie \
  --with-libs 2>configure.err \
   && make 2>make.err && make install 2>make_install.err
 




0x03. OPENSSH


Téléchargement :


ver=$(curl -s 'http://ftp.fr.openbsd.org/pub/OpenBSD/OpenSSH/portable/' \
       |grep -vi ”beta|alpha|rc” \
       |grep -Eo ”openssh-[0-9]+.[0-9]+([a-z][0-9]+)?.tar.gz” \
       |sort -rn \
       |head -n1)
curl ”http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/$ver-o $ver
 

Installation :


ln -s /usr/include/
./configure \
  --prefix=/usr \
  --sysconfdir=/etc/ssh \
  --with-ssl-engine \
  --bindir=/usr/bin \
  --libexecdir=/usr/libexec \
  --includedir=/usr/include \
  --with-include-dir=/usr/include/openssl \
  --without-openssl-header-check \
  --with-ssl-dir=/usr/lib \
  --with-pie \
  --with-pam 2>configure.err \
  && make 2>make.err && make install 2>make_install.err
 




0x03. PERMISSIONS APFS



Il faudra signer les binaires, pour cela il est nécessaire de créer une signature :


./files/base-components/signature-1.png

./files/base-components/signature-2.png


Du coup, pour signer et remettre le flag restricted sur les fichiers fraichement installés. Sans oublier de mettre sudo avec le bit SetUID (chmod +s, chmod 4xxx)


  for file in /usr/bin/ssh* \
              /usr/bin/scp \
              /usr/bin/ocspcheck \
              /usr/bin/cvtsudoers \
              /usr/bin/sudoreplay \
              /usr/bin/sudo \
              /usr/bin/openssl \
              /usr/sbin/visudo \
              /usr/libexec/sudo/sudoers.so \
              /usr/libexec/sudo/group_file.so \
              /usr/libexec/sudo/system_group.so \
              /usr/libexec/sudo/libsudo_util.0.dylib \
              /usr/libexec/sudo/sudo_noexec.so \
              /usr/lib/libcrypto.45.dylib \
              /usr/lib/libtls.19.dylib \
              /usr/local/lib/libssl* \
              /usr/lib/libssl.47.dylib ; do
      ls -1 $file >/dev/null 2>&1 || continue
      codesign -s YourSignature -v -f$file”
      chflags restricted ”$filedone
 
  chown root:wheel /usr/sbin/visudo
  chmod 4755 /usr/sbin/visudo
  chown root:wheel /usr/bin/sudo*
  chmod 4755 /usr/bin/sudo*
  chflags restricted /usr/bin/sudo
 
  # les composants appelés par curl ne sont pas signés et une fois SIP réactivé, curl ne pourra s'exécuter
  chflags norestricted ”/usr/bin/curl” 
 



   =>   Écrit par : Nicolas, le 02 mai 2019


 
Mots clés :  
  security 
  
  macos 
    >   Articles connexes :

Durcissement de Windows



Comment gagner du temps sur Internet



/tmp et /var/log en noexec sur macOS



5309780