MacOSX est basé sur Unix, plus précisément sur FreeBSD. Le noyau a été retravaillé par Steve JOBS afin de gagner en performance. Le noyau bien qu'étant enfant des systèmes BSD, en devient propriétaire grâce à la particularité de la license BSD (moins restrictives que la licence GPL) mais également et surtout par son comportement. MacOSX reste basé sur Unix, tout comme Windows conserve une base MSDOS+NT, par conséquent il est tout à fait possible de transformer ce système multimédia en un véritable système d'exploitation de pentests. Nous verrons dans cet article comment faire.





0x01. À PROPOS DU TERMINAL



Venant du monde GNU/Linux je trouve le terminal de MacOSX bien limité par défaut. Mais héritant du monde Unix, MacOSX peut se voir attribuer des possibilités d'évolution et de fonctionnalité presqu'aussi importante que Linux.

Le terminal ne permet pas par défaut d'aller au début d'une phrase ou de naviguer de mot en mot comme nous pourrions le faire avec la touche CTRL sous PC. Nous utiliserons ZSH pour combler ce manque.


 
# Comme sous certaine configuration, comme Debian, le "pipe" peut se briser :
 
find . -type d | grep "Mon dossier"
bash: command not found: grep
 
# Il suffit de rapprocher la commande au relais (pipe) :
find . -type d |grep "Mon dossier"
 
# De même pour les tests et les espaces, il faut parfois réécrire le test :
[ "$var" = "valeur" ] && echo "OK"
 
[ 1 : command not found
 


Installer ZSH et le personnaliser est une solution, afin de permettre la navigation mot à mot dans une phrase, en appuyant avec CTRL et la flèche vers la droite (ou la gauche) ou encore en remottant un historique similaire, par exemple en tapant vi et FN + la flèche du haut on ne se rappelle que de l'historique commençant par vi... (vim ~/.zshrc , vim /etc/zshenv ...) et aussi aller en fin de ligne, il faut donc :


port install zsh 


puis créer un fichier /etc/zshenv contenant au moins :


 
bindkey '/033[6D'   beginning-of-line       # Home
bindkey '/033[6C'   end-of-line             # End
bindkey '^[[3~'     delete-char             # Del
bindkey '^[[2~'     overwrite-mode          # Insert
bindkey '/033[7D'   history-search-backward # PgUp
bindkey '/033[7C'   history-search-forward  # PgDn
bindkey '/033[5D'   emacs-backward-word     # CTRL <-
bindkey '/033[5C'   emacs-forward-word      # CTRL ->
 




0x02. SÉCURISER L'ENVIRONNEMENT



Loiciels recommandés :
- Little Snitch, un firewall applicatif
- WaterRoof, un firewall réseau permettant d'écrire des règles avec PacketFilter : ipfw
- Un antivirus, ClamXAV, très rare ne veut pas dire inexistant, et il peut toujours être bon de pouvoir détecter des virus pour éviter d'infecter d'autres ordinateurs (PC sous Windows infecté -> Mac sous MacOSX -> PC sous Windows sain (devient donc infecté))

Dans un autre soucis de sécurité, il peut être judicieux d'installer un Keylogger. Nous utiliserons une extension du noyau, un fichier Kext : logKext. Kext pour Kernel Extension.

Un petit script m'a été nécessaire afin de l'activer ou de le désactiver. Pour ce script il nous faut :


 
sudo cp "/Library/Application Support/logKext/logKextDaemon" "/Library/Application Support/logKext/logKextDaemon.enable"
echo '#!/bin/sh
path="/Library/Application Support/logKext"
touch "$path/k.disabled"
rm -f "$path/k.enabled"
sleep 24192000' > "/Library/Application Support/logKext/logKextDaemon.disable"
 

 
 
#!/bin/bash
 
APP="lkl"
path="/Library/Application Support/logKext"
 
function not_found
{
 shell=$(echo $SHELL |grep -oE "....$" |sed 's/////1')
 echo "$shell: command not found: $APP"
 exit 127
}
 
 
function usage
{
  echo "
Usage: $APP <action>
 
 enable : enable logging
 disable: disable logging
 start  : launch the daemon
 stop   : stop and unload the daemon
 clean  : purge all logs
 status : get status of $APP
 client : access to logs 
"
 exit $1
}
 
function not_root
{
  echo "
Only root can use $APP.
"
  exit 1
}
 
[ $# -ne 1 ] && not_found
[ $(id -u) -ne 0 ] && not_root
 
 
case $1 in
 
 "status")
  en=$(ls "$path"/k.* |cut -d'.' -f2) 
  echo "$APP : $en"  
 ;;
 
 "enable")
  touch "$path/k.enabled"
  rm -f "$path/k.disabled"
  defaults write com.fsb.logKext Logging 1
  cp -f "$path/logKextDaemon.enable" "$path/logKextDaemon"
  $0 start
 ;;
 
 "disable")
  touch "$path/k.disabled"
  rm -f "$path/k.enabled"
  defaults write com.fsb.logKext Logging 0
  cp -f "$path/logKextDaemon.disable" "$path/logKextDaemon"
  $0 stop
 ;;
 
 
 "start") 
  launchctl start com.fsb.logKext
  launchctl load /Library/LaunchDaemons/logKext.plist
 ;;
 
 
 "stop")
  launchctl stop com.fsb.logKext
  launchctl unload /Library/LaunchDaemons/logKext.plist
 ;;
 
 
 "clean")
  $0 stop
  rm -f /Library/Preferences/com.fsb.logKext
 ;;
 
 
 "client")
  logKextClient
 ;;
 
 "-h")
  usage 0
 ;;
 
esac
 




0x03. LE SYSTÈME DE 'PORTS' DE FREEBSD



Fink propose paquets à compiler sur un dépot de type Debian, tandis que les MacPorts se base sur une architecture en ligne de type FreeBSD. Il existe aussi un outil, bmake, qui permet d'installer des programmes à compiler via des Makefile comparables aux Makefile qu'il y a dans les "ports BSD", c'est à dire des Makefile appelant des programmes à télécharger sur Internet, les audite via une base de données puis les compile et les installe.

Une fois bmake (BSD make) compilé et configuré pour etre dans le PATH, j'ai été amener, pour plus de confort, à écrire un script pour installer, désinstaller les portables BSD. Bien que perfectible, il permet pour le moment, la recherche, l'installation et la suppression d'un package.


 
#!/bin/bash
 
# Constantes
_PKG_FOLDER="/opt/local/pkgsrc"
_PKG_LST_FILE="$_PKG_FOLDER/packages.lst"
_BLANC="/e[1;29m"
_ROUGE="/e[1;31m"
_VERT="/e[1;32m"
_FOND="/e[0m"
_APP="pkg"
 
if [ ! -z $PKGCOLOR ]
then
	if [ $PKGCOLOR -eq 0 ]
	then
		_BLANC=""
		_ROUGE=""
		_VERT=""
		_FOND=""
	fi
fi
 
_ERR_NOT_FOUND=1
_ERR_UNKNWON=2
 
# Variables globales
I=""
CAT=""
SOFT=""
[ -z $VERBOSE ] && VERBOSE=1
QUIET=0
 
 
 
 
# Fonctions utiles au script
function _is_root
{
	[ $(id -u) -eq 0 ] && return 0
	return 1
}
 
function _pkg_exists
{
	ls -d $_PKG_FOLDER/*/$1 >/dev/null 2>&1 ; E=$?
	return $E
}
 
function _pkg_extract
{
	resultat=$(grep -E ";$1$" $_PKG_LST_FILE)
	I=$(echo $resultat | cut -d';' -f1)
	CAT=$(echo $resultat | cut -d';' -f2)
	SOFT=$(echo $resultat | cut -d';' -f3)
	E=$?
	return $E
}
 
function _error
{
	printf "/n$_ROUGE$*$_FOND/n/n"
}
 
function _pkg_error
{
	case "$1" in
		"not_found") _error "Erreur: le paquet n a pas été trouvé dans les dép&ocirc;ts BSD." ;;
		"not_root")  _error "Erreur: il faut les droits administrateurs pour PKG."      ;;
		"unknown")   _error "Erreur: une erreur inconnue s est produite."               ;;
	esac
	exit $2
}
 
 
 
# Fonctions utiles à l utilisateur
function usage
{
	printf "
Usage : $_BLANC$_APP$_FOND <action> [package]
 
L action peut &ecirc;tre :
 $_VERT""list$_FOND     : affiche la liste des paquets disponibles
 $_VERT""update$_FOND   : met à jour selon l arborescence des dossiers
 
 $_VERT""search$_FOND   : recherche un paquet, peut se faire selon son index
 $_VERT""show$_FOND     : affiche la description d un paquet
 $_VERT""install$_FOND  : installe le paquet gr&acirc;ce à : bmake && bmake install
 $_VERT""remove$_FOND   : supprime et nettoie le paquet via : bmake deinstall && bmake clean
 
"
echo
 
	exit 0
}
 
 
function pkg_list
{
	CMD="cat $_PKG_LST_FILE"
	[ $# -eq 1 ] && CMD="grep $1 $_PKG_LST_FILE"
	[ $# -eq 2 ] && CMD="grep -E $1$ $_PKG_LST_FILE"
	[ $# -eq 2 ] && [ "$2" = "-q" ] && QUIET=1
 
	i=0
	for package in $($CMD)
	do
		i=$((i+1))
		I=$(echo $package | cut -d';' -f1)
		CAT=$(echo $package | cut -d';' -f2)
		SOFT=$(echo $package | cut -d';' -f3)
		[ $QUIET -eq 0 ] && printf "/n%-5s > $_VERT%-12s$_FOND > %-30s : $_BLANC%s$_FOND" "$I" "$CAT" "$SOFT" "$_PKG_FOLDER/$CAT/$SOFT"
	done
	[ $i -eq 0 ] && _pkg_error "not_found" 2
	[ $QUIET -eq 0 ] && printf "/n/n$i paquets listé(s)/n/n"
}
 
 
function pkg_show
{
	_pkg_exists "$1"
	[ $? -ne 0 ] && _pkg_error "not_found" $_ERR_NOT_FOUND
 
	_pkg_extract "$1"
	[ -f $_PKG_FOLDER/$CAT/$SOFT/DESCR ] && /
 		descr=$(cat $_PKG_FOLDER/$CAT/$SOFT/DESCR)
	[ -f $_PKG_FOLDER/$CAT/$SOFT/pkg-descr ] && /
 		descr=$(cat $_PKG_FOLDER/$CAT/$SOFT/pkg-descr)
 
	printf "
$_VERT""Index       :$_FOND $I
$_VERT""Catégorie   :$_FOND $CAT 
$_VERT""Logiciel    :$_FOND $SOFT
$_VERT""Chemin      :$_FOND $_PKG_FOLDER/$CAT/$SOFT
$_VERT""Description :$_FOND
$descr
"
echo
}
 
 
 
 
function pkg_install
{
	_pkg_exists "$1"
	[ $? -ne 0 ] && _pkg_error "not_found" $_ERR_NOT_FOUND
 
	_pkg_extract "$1"
	cd $_PKG_FOLDER/$CAT/$SOFT
	[ $VERBOSE -eq 1 ] && VERT=$_VERT
	FOND=$_FOND ; [ $VERBOSE -eq 1 ] && FOND=$FOND"/n"
 
	printf "/nSélection du paquet : $_BLANC$SOFT$_FOND"
	printf "/n$VERT""Compilation du paquet en cours...$FOND"
	[ $VERBOSE -eq 0 ] && bmake >/dev/null 2>&1
	[ $VERBOSE -eq 1 ] && bmake 2>&1
	E=$?
	if [ $E -eq 0 ] ; then
		printf "$_VERT""fait.$_FOND/n"
 
		printf "$VERT""Installation du paquet en cours...$FOND"
		[ $VERBOSE -eq 0 ] && bmake install >/dev/null 2>&1
		[ $VERBOSE -eq 1 ] && bmake install 2>&1
		E=$?
		if [ $E -eq 0 ] ; then
			printf "$_VERT""fait.$_FOND/n"
		else
			printf "$_ROUGE""échoué.$_FOND/n"
		fi
 
		printf "$VERT""Nettoyage du paquet en cours...$FOND"
		[ $VERBOSE -eq 0 ] && bmake clean >/dev/null 2>&1
		[ $VERBOSE -eq 1 ] && bmake clean 2>&1
		if [ $E -eq 0 ] ; then
			printf "$_VERT""fait.$_FOND/n"
		else
			printf "$_ROUGE""échoué.$_FOND/n"
		fi
 
	else
		printf "$_ROUGE""échoué.$_FOND/n"
	fi
	printf "/n"
}
 
 
 
function pkg_remove
{
	_pkg_exists "$1"
	[ $? -ne 0 ] && _pkg_error "not_found" $_ERR_NOT_FOUND
 
	_pkg_extract "$1"
	cd $_PKG_FOLDER/$CAT/$SOFT
	[ $VERBOSE -eq 1 ] && VERT=$_VERT
	FOND=$_FOND ; [ $VERBOSE -eq 1 ] && FOND=$FOND"/n"
 
	printf "/nSélection du paquet : $_BLANC$SOFT$_FOND"
	printf "/n$VERT""Suppression du paquet en cours...$FOND"
	[ $VERBOSE -eq 0 ] && bmake deinstall >/dev/null 2>&1
	[ $VERBOSE -eq 1 ] && bmake deinstall 2>&1
	E=$?
	if [ $E -eq 0 ] ; then
		printf "$_VERT""fait.$_FOND/n"
	else
		printf "$_ROUGE""échoué.$_FOND/n"
	fi
 
	printf "$VERT""Nettoyage du paquet en cours...$FOND"
	[ $VERBOSE -eq 0 ] && bmake clean >/dev/null 2>&1
	[ $VERBOSE -eq 1 ] && bmake clean 2>&1
	if [ $E -eq 0 ] ; then
		printf "$_VERT""fait.$_FOND/n"
	else
		printf "$_ROUGE""échoué.$_FOND/n"
	fi
 
	printf "/n"
}
 
function pkg_update
{
	printf "/nMise à jour de la collection BSD..."
 
	i=0 ; E=0
	rm -f $_PKG_LST_FILE
	touch $_PKG_LST_FILE
 
	for p in $(find $_PKG_FOLDER/ -maxdepth 2 -type d |sed 's/////////1'|sed 's///opt//local//pkgsrc///;/1'|sed 's////;/1')
	do
		soft=$(echo $p | cut -d';' -f3)
		if [ ${#soft} -gt 1 ]
		then
			i=$((i+1))
			echo $i$p >> $_PKG_LST_FILE
		fi
		E=$?
	done
	if [ $E -eq 0 ] ; then
		printf "$_VERT""fait.$_FOND/n"
		printf "Fichier à jour : $_VERT$_PKG_LST_FILE$_FOND/n"
	else
		printf "$_ROUGE""échoué.$_FOND/n"
	fi
	echo
}
 
 
_is_root || _pkg_error "not_root" 
 
 
if [ $# -lt 1 -o $# -ge 3 ]
then
	usage 0
fi
 
 
if [ $# -ge 1 ]
then
	ACTION="$1"
	case $ACTION in 
		"list")      pkg_list              ;;
		"update")	 pkg_update            ;;
	esac
fi
 
 
if [ $# -eq 2 ]
then
	MATCH="$2"
	case $ACTION in 
		"search")    pkg_list    $2  ;;
		"show")      pkg_show    $2  ;;
		"install")   pkg_install $2  ;;
		"remove")    pkg_remove  $2  ;;
	esac
fi
 

# Spoofer une adresse MAC
# ----------------
# à écrire dans /usr/local/bin/spoof :
 
 
#!/bin/bash
 
APP="macchanger"
 
IFCE="en1"
MAC=""
LIMIT_ATTEMPT=30
REAL_MAC_EN0="d4:9a:20:04:9f:7e"
REAL_MAC_EN1="f8:1e:df:d6:5a:02"
 
DB="/usr/local/share/macchanger.db"
 
 
function _random_6_mac
{	
	o[0]="0";	o[1]="1"
	o[2]="2";	o[3]="3"          
  o[4]="4";	o[5]="5"
	o[6]="6";	o[7]="7"
	o[8]="8";	o[9]="9"
 
	o[10]="a";	o[11]="b"
	o[12]="c";	o[13]="d"
	o[14]="e";	o[15]="f" 
 
	MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
	MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
	MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
}                    
 
 
 
function _random_mac
{	
	o[0]="0";	o[1]="1"
	o[2]="2";	o[3]="3"          
  o[4]="4";	o[5]="5"
	o[6]="6";	o[7]="7"
	o[8]="8";	o[9]="9"
 
	o[10]="a";	o[11]="b"
	o[12]="c";	o[13]="d"
	o[14]="e";	o[15]="f" 
 
	#MAC=${o[$((RANDOM%16))]}
	#MAC=$MAC${o[$((RANDOM%16))]}
  MAC="00:$((RANDOM%3))"${o[$((RANDOM%16))]}
  MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]} 
	MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
	MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
	MAC=$MAC":"
	MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
	#MAC=$MAC":"
	#MAC=$MAC${o[$((RANDOM%16))]} ; MAC=$MAC${o[$((RANDOM%16))]}
}                    
 
 
 
function _airport
{                                              
	# Exécute airport en tant que root
	sudo airport $* >/dev/null 2>&1
}        
 
function _arping
{
	sudo arping $* >/dev/null 2>&1
}  
 
function _killall
{
	sudo killall $1	>/dev/null 2>&1
}
 
 
 
function macchanger
{               
	affiche "Previous MAC address : $OLDMAC"
 	affiche "New MAC address .....: $2"
 
  ifconfig $1 | grep -i "en0" >/dev/null 2>&1
  wifi=$?
 
  E=1 ; i=0
  while [ $E -eq 1 ]
  do
    if test $wifi -ne 0; then
      _killall airport
      for i in $(jot - 1 200); do
        _airport -z $1 &
      done
      sleep 2
      _killall airport
    fi
	  ifconfig $1 lladdr $2
    ifconfig $1 | grep -i "$2" >/dev/null 2>&1
    E=$? ; i=$((i+1))
    if [ $E -ne 0 -a $i -gt $LIMIT_ATTEMPT ]
    then
       error "too many failed attempts to change MAC address./n"
       exit 3
    fi
  done
  echo 	
}                             
 
 
 
function get_mac_from_ip
{                                                        
	IP=$2
	affiche "Getting MAC address of IP address target : $IP"
	MAC=$(sudo arping -i $1 -c 1 -r $IP 2>/dev/null) 
}
 
 
 
function usage
{
	printf "
Usage: /e[1;29m$APP/e[0m [ < -l | -s # | [interface] <ip|mac|random|-w #> > ]
 
 -l   : list available MAC addresses
 -s # : search for mac address constructor
 -w # : set MAC address with known head MAC address
 -L # : set MAC address with constructor name
 -h   : this sheet
 without parameter, spoof en1 with random mac
 
Samples:
  $APP -l
  > list all known mac address
 
  $APP -s sony
  > search head mac address of sony
 
  $APP -w 00:00:95
  > spoof to 00:00:95:##:##:## 
 
  $APP -L sony
  > spoof to SONY_HEAD_MAC_ADDR:##:##:## 
 
Program will spoof MAC address with one given or with
fully random MAC address. If interface is not specified, /e[1;29men1/e[0m
will be used as default. If IP address is specified, an ARP request is used to get ARP address of target
and MAC address of interface will be set. This script use command :
/e[1;29mifconfig <interface> lladdr <mac_address>/e[0m
To correctly spoof MAC address of airport interface, you have to :
go to settings > networks > airport > uncheck box 'automatically connect' 
 
"          
	exit $1
}                
 
 
function error
{
	printf "/n/e[1;31mError : $* /e[0m/n/n"
}
 
function affiche
{
	printf "/n/e[1;32m */e[0m $*"
}
 
function titre
{
	printf "/n/e[1;32m$*/e[0m"
}
 
function list
{
  cat $DB |sed 's/^.... - //1'
}
 
function search
{
  grep -i "$1" $DB |sed 's/^.... - //1'
}
 
function from_hw
{
  MAC=$2 ; IFCE=$1
  _random_6_mac
  sudo $(basename $0) $IFCE $MAC
  exit $?
}                    
 
function from_list
{
  IFCE=$1 ; S=$2
  L=$(search "$S" |cat -b |awk {'print $1'} |tail -n1)
  if [ x"$L" = "x" ] ; then
    error "unable to find vendor" 
    exit 1
  fi
  R=$((RANDOM % L))
  MAC=$(search "$S"|awk {'print $1'} |tail -n $R |head -n 1)
  VENDOR=$(search "$S"|awk {'print $3" "$4" "$5" "$6" "$7" "$8" "$9" "$10'} |tail -n $R |head -n 1)
 
  _random_6_mac
  titre $VENDOR
  [ ! -z "$MAC" ] && $(basename $0) $IFCE $MAC 2>&1|grep -v 'Changing MAC address'
  exit $?
}                    
 
 
 
 
# Programme principal
# -------------------
if test $# -eq 0
then
  $(basename $0) $IFCE random
  exit $?
fi
 
if test $# -eq 2
then
	IFCE=$1
	ARG=$2
fi           
 
if test $# -eq 1
then
	ARG=$1
fi   
 
if test $# -eq 3
then
  IFCE=$1
  ARG=$2
  ARG2=$3
fi
 
 
 
if [ "$1" = "-h" ]
then
  usage 0
fi
 
if [ "$IFCE" = "-s" ]
then
  search $ARG
  exit $?
fi
 
if [ "$ARG" = "-L" ]
then
  from_list $IFCE $ARG2
  exit $?
fi
 
if [ "$ARG" = "-w" ]
then
  from_hw $IFCE $ARG2
  exit $?
fi
 
 
if [ "$ARG" = "-l" ]
then
  list
  exit $?
fi
 
if test $(id -u) -ne 0
then
  error "you need to be root."
  echo
  exit 3
fi
 
OLDMAC=$(ifconfig $IFCE |grep -ioE "(([0-9a-fA-F]){2}:){5}(([0-9a-fA-F]){2})")
 
if [ "$ARG" = "random" ]
then
	_random_mac
  E1=0
	E2=1
fi
 
if [ "$ARG" = "restore" ]
then
  [ "$IFCE" = "en0" ] && MAC=$REAL_MAC_EN0
  [ "$IFCE" = "en1" ] && MAC=$REAL_MAC_EN1
 
  E1=0
  E2=1
fi
 
if [ "$ARG" != "random" -a "$ARG" != "restore" ]
then
	MAC=$(echo "$ARG" | tr A-Z a-z | grep -oE "(([0-9a-fA-F]){2}:){5}(([0-9a-fA-F]){2})") ; E1=$?
	IP=$(echo "$ARG" | grep -oE "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.(25[0-5]|2[0-4][0-9]|\\
[01]?[0-9][0-9]?)/.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)") ; E2=$?
fi                        
 
if [ $E1 -eq 0 ]
then
	titre "Changing MAC address ..."
	MAC=$(echo "$MAC" | tr A-Z a-z)
fi
 
if test $E2 -eq 0
then                             
  titre "Getting MAC address of $IP ..."
  echo
	get_mac_from_ip $IFCE "$IP"
  if test -z "$MAC" 
  then
    error "Unable to get MAC address. Exiting./n"
    exit 1
  else
    affiche "Found via ARP request : $MAC"
  fi
	printf "/b/b/b/e[0m:/e[1;29m $MAC/n/e[0m"
fi                                      
 
if test $((E1+E2)) -eq 2
then
	error "Incorrect MAC or IP address."      
  usage
	exit 2
fi
 
macchanger $IFCE "$MAC"
enconfig $IFCE
 
 
 
# EOF
 
 

# Dans /usr/local/share/macchanger.db : 
# -------------------------------------

0000 - 00:00:8f - Raytheon Raylink/WebGear Aviator2.4
0001 - 00:00:f0 - Samsung MagicLan (+ some other PrismII cards)
0002 - 00:00:f1 - Raytheon Raylink/WebGear Aviator2.4
0003 - 00:01:03 - 3Com 3CRWE62092A
0004 - 00:02:2d - Lucent (WaveLAN, Orinoco, Silver/Gold), Orinoco (Silver, PC24E), Buffalo and Avaya
0005 - 00:02:6f - Senao SL-2011CD
0006 - 00:02:78 - Samsung MagicLan (+ some other PrismII cards)
0007 - 00:02:a5 - Compaq WL110
0008 - 00:03:2f - Linksys WPC11, Repotec GL241101
0009 - 00:04:5a - Linksys WPC11, WUSB11
0010 - 00:04:75 - 3Com 3CRWE62092B
0011 - 00:04:e2 - SMC SMC2632W

# PS : à compléter avec par exemple macchanger de BackTrack ou sur Internet.
 
# Vidage du cache DNS
# ----------------
 
dscacheutil -flushcache
 

 
# Installation de Scapy 2.1.x :
# -----------------------------
 
# On se met en super-utilisateur, root :
sudo -E bash
 
# On install ScaPy et ses dépendances par le système des dépots Darwin :
# À cause d'un conflit avec le programmation d'installation de Python2.5 :
port deactivate py25-setuptools   
port install scapy
 
# On se positionne dans le dossier de bibliothèques étendues de Python2.5 :
cd /opt/local/lib/python2.5/site-packages/
 
# Téléchargement de la dernière version de Scapy :
F=scapy-2.1.1.tar.gz
wget "http://packetstormsecurity.org/UNIX/scanners/scapy-2.1.1.tar.gz" -O $F 
 
# Il faut extraire l archive téléchargée :
tar xzf $F
 
# On sauvegarde les sources de ScaPy avant de les remplacer :
mv scapy scapy.macports
 
# On remplace le code source de cette dernière version par l actuelle :
cp -rf scapy-2.1*/scapy .
 
# Et on supprime les fichiers inutiles :
rm -f "$F"
rm -rf scapy-*
 
 
#
# IMPORTANT : cette procédère fonctionne car la version de Python reste en 2.5
# et parceque les versions de ScaPy ne sont pas trop éloignée (2.0.x -> 2.1.x)
#
 
 

Une fois bien installé, la ligne de commande propose :


WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.1.1-dev)
>>> 



0x04. UNE MACHINE VIRTUELLE QUI RESTE INDISPENSABLE : BACKTRACK



Vmware : la virtualisation sur tout les systèmes, sa spécialité
Parallels : l'environnement MacOSX dans sa poche
Virtuabox : disponible à tout le monde sur tous les systèmes d'exploitation





0x05. CONFIGURER SON SYSTÈME DE FOND EN COMBLE


Faire fonctionner IPCALC :


 
# Modifier le fichier /System/Library/Perl/5.10.0/Math/BigInt.pm pour y mettre :
# à la ligne 1185:
return $x->round(@r) if ($y == 0);  # if $y->is_zero(); ## Patched by $USER
 

Jouer avec les carte réseaux


 
# Les interfaces virtuelles :
ifconfig en1 alias 192.168.1.98
 
# Supprimer une interface virtuelle :
ifconfig en1 -alias 192.168.1.98
 
# Bloquer le traffic vers une poste du réseau :
ipfw add 100 deny ip from 192.168.2.1 to 192.168.2.253
 

Gestion des entrées/sorties matérielles


 
# Découverte des périphériques :
ioreg
ioreg | grep -i wireless
 
 
# Surveillance des entrées/sortie, en lecture/écriture sur le disque :
iosnoop 
 
  501  1401 R 340300336 131072 diskimages-help ??/TimeMachines/Multimedia.dmg
  501  1421 W 269832472 1048576      ctask ??/One hot minute/07-One big mob.mp3
 
# Affiche des statistiques sur les disques durs
iostat
 
# Permet d utiliser DD comme sur tous les UNIX,
# par défaut 'mount' liste les disques montés, le paramètre -l 
# valable dans Linux, ne l est pas dans MacOSX (*BSD)
mount | grep '/Volume/MA_CLEF_USB' | awk {'print $1'}
 
# La commande d utilitaire de disque d Apple [TODO: A VERIFIER]
diskutil unmount /Volume/MA_CLEF_USB
dd if=/dev/disk5s1 of=BACKUP_disk5s1
 
 

Voici quelques options de démarrage de EFI, le chargeur de démarrage des ordinateurs Apple :


 
# Démarrer avec l architecture du noyau par défaut
sudo systemsetup -setkernelbootarchitecture default
 
# Démarrer en 32 bits
sudo systemsetup -setkernelbootarchitecture xi386
 
# Démarrer en 64 bits
sudo systemsetup -setkernelbootarchitecture x86_64
 
# Démarrer en mode bavard
sudo nvram boot-args=-v
 
# Démarrer en mode silencieux (par défaut)
sudo nvram boot-args=
 

Pour surveiller le traffic réseau sur les interfaces virtuelles VMware, vmnet1 & vmnet8 :


 
# Démarrer avec l architecture du noyau par défaut
"/Library/Application Support/VMware Fusion/vmnet-sniffer" vmnet1
 
# Pour plus de confort : 
ln -s "/Library/Application Support/VMware Fusion/vmnet-sniffer" /usr/local/bin/vmnet-sniffer
 
# D ailleurs pour configurer les plages d adresse IP des interface, il faut éditer le fichier networking :
sudo vim "/Library/Application Support/VMware Fusion/networking"
 
 


Afin de totalement usurper le Mac d'un point de vue, réseau il est possible de modifier les adresses matérielles
(adresse MAC) depuis un script de démarrage. La seule condition pour que ce soit pour Airport est de désactiver la connexion automatique :


Préférences Système > Réseau > Airport (1) > Avancé :

Il faut décocher la case : "Mémoriser les réseaux auxquels cet ordinateur s'est connecté"

(1) : à noter que l'identifiant Airport est apparement écrit à l'installation de MacOSX, 
c'est à dire l'adresse physique d'origine. 


Le script de démarrage est à copier dans : /Library/StartupItems


 
# Dans StartupParameters.plist :
{
  Description     = "Spoof MAC addresses";
  Provides        = ("SpoofEN");
}
 

 
#! /bin/sh
#
# $Id: SpoofEN 20SA10 2010-10-21 20:38:29Z saelyx $
 
. /etc/rc.common
 
StartService ()
{
 #
 # Spoof MAC address on ethernet and wireless interfaces
 #
 /usr/local/bin/spoof en1 00:13:CE:AD:DE:13
 /usr/local/bin/spoof en0 00:0F:B0:A5:AD:37
}
 
StopService ()
{
 return 0;
}
 
RestartService () { StartService; }
 
RunService "$1"
 

Voici des règles pour un poste nomade. En environnement réseau, certaines peuvent bloquer le parcours du réseaux, elles serton identifiés par "# (1)". Ces règles basées sur IPFW. IPFW signifie "IP firewall". Elles sont valables sur un poste client installé sous *BSD: PC-BSD, DesktopBSD, FreeSBIE...


 
# 
#
# IP   : Journalise les paquets usurpés
#
ipfw add  00110 deny log ip from 127.0.0.0/8 to any in via en*
ipfw add  00120 deny log ip from any to 127.0.0.0/8 in via en*
ipfw add  00130 deny log ip from 224.0.0.0/3 to any in via en*
ipfw add  00140 deny log ip from any to 224.0.0.0/3 in via en*
# 
#
# ICMP : Permet les requ&ecirc;tes et bloque les demandes 
#
ipfw add  01000 allow icmp from any to any out                      # (1)
ipfw add  01100 allow icmp from any to me icmptypes 0,3,4,11 in     # (1)
ipfw add  01200 deny log icmp from any to any via en*               # (1)
#
#
# UDP  : Refuse les services d annonciation Avahi/Bonjour
#
ipfw add  03000 deny udp from me to any dst-port 5353               # (1)
ipfw add  03100 deny udp from any 5353 to any                       # (1)
# UDP  : n accepte que les demandes légitimes                       # (1)
ipfw add  03200 allow udp from any to any keep-state                # (1)
#
#
# TCP  : Stateful Packet Inspection : inspection des paquets selon leur état
#
ipfw add  04000 check-state
ipfw add  04100 allow tcp from any to any setup keep-state
ipfw add  04200 allow tcp from any to any established
ipfw add  04300 allow tcp from any to any out
# TCP  : Journalise quelques scan de NMAP
ipfw add  04350 deny log tcp from any to any in tcpflags fin,psh,urg
ipfw add  04351 deny log tcp from any to any in tcpflags !syn,!fin,!ack,!psh,!rst,!urg
ipfw add  04352 deny log tcp from any to any in tcpflags syn,fin
ipfw add  04353 deny log tcp from any to any in tcpflags fin,rst
ipfw add  04354 deny log tcp from any to any in tcpflags syn,rst
ipfw add  04355 deny log tcp from any to any in tcpflags ack,urg
ipfw add  04356 deny log tcp from any to any in tcpflags ack,rst
#
#
# DENY : Refuse toutes les autres demandes
# 
# ICMP : ne refuse que les demandes via les interfaces physiques en0, en1, en2...
ipfw add  05000 deny log icmp from any to me in icmptypes 8 via en*  # (1)
# IGMP : ignore le protocol IGMP
ipfw add  65410 deny log igmp from any to any via en*                # (1)
# Refuse tout le reste et journalise par protocole 
ipfw add  65420 deny log udp from any to any via en*                 # (1)
ipfw add  65430 deny log tcp from any to any via en*
ipfw add  65440 deny log ip from any to any via en*
# Accepte toutes les demandes de l interface de retour
ipfw add  65450 allow ip from any to any via lo*
# Refuse le reste
ipfw add  65525 deny ip from any to any
# Configuration par défaut des systèmes BSD
ipfw add  65535 allow ip from any to any
 
 
# (1)  : ces règles peuvent emp&ecirc;cher du poste de travail sur son réseau, pour le partage de documents
# l utilisation des protocoles de découvertes...
 




0x06. RÉFÉRENCES



Enable NAT routing
Mac OS X : Raccourcis clavier




   =>   Écrit par : Nicolas, le 06 novembre 2010


 
Mots clés :  
  macos 
  
  theme 
    >   Articles connexes :

Comment gagner du temps sur Internet



/tmp et /var/log en noexec sur macOS



Thème iUnix



8132885