Análise forense: encontre todos os arquivos modificados em torno de um conhecido

3

Um instalador que não é realmente limpo (Adobe Acrobat Reader DC) instalou no meu Unix (Mac OS X) muitos arquivos em lugares diferentes.

Eu tenho um arquivo de referência Application , o qual eu tenho certeza que foi instalado no início deste processo de instalação, e tenho certeza que esse processo de instalação levou menos de 2 minutos.

Com:

ls -lc /Application

Eu posso obter o horário correto de criação deste arquivo de referência:

-rwxrwxr-x  3 root  wheel  102 Dec 24 18:39 /Application

Com essas informações, criei um comando find simples para estimar o tamanho do dano:

find / -newermt '12/24/2015 18:37' ! -newermt '12/24/2015 18:41' -ls

E eu posso verificar se esta abordagem está listando todos os arquivos modificados ou criados por este instalador e nada mais.

(Aqui está o truque: faça o mesmo find nos 5 minutos anteriores, e nos próximos 5 minutos e verifique se eles estão vazios. Para ser honesto, Tenho sorte: meu Unix estava quieto neste momento.

Como posso fazer um script forense geral e simples desse método para calcular as 2 datas úteis para o find :

Dec 24 18:39    →    12/24/2015 18:37, 12/24/2015 18:41
    
por daniel Azuelos 30.12.2015 / 13:29

2 respostas

3

Desde que eu precisei desse tipo de ferramenta para instaladores mal-intencionados e crapware, Eu escrevi:

crater

para avaliar o dano causado por qualquer software que se comporte mal.

#!/bin/sh
# shell script to search for files created or modified around
# a reference modified file (known impact on the file system) 
# default time interval to search is 5 minutes

_cn='basename $0'

USAGE="Usage: ${_cn} impact_reference_file [delay_around_impact_in_minutes]"

case $# in
1|2)
        _ref_file="$1"
        ;;
*)
        echo "${USAGE}" >&2
        exit 2
        ;;
esac

_ref_date='ls -ldT "${_ref_file}" | awk '{printf ("%s %2s %s %s\n", $6, $7, $8, $9)}''

_minutes=${2:-5}
_seconds='expr ${_minutes} \* 60'
_format="+%m/%d/%Y %H:%M:%S"

echo "\treference date:\t${_ref_date}"

# convert reference date in seconds since the epoch
# so as to make arithmetic on it

_ref_date_epoch='date -j -f "%b %e %T %Y" "${_ref_date}" "+%s"'
_beg_date_epoch='expr ${_ref_date_epoch} - ${_seconds}'
_end_date_epoch='expr ${_ref_date_epoch} + ${_seconds} + 1'
_log="/var/log/${_cn}_'date -r ${_ref_date_epoch} +%d-%m-%Y_%H:%M:%S'.log"
echo "\tlog: \t\t${_log}"

# convert back to the format for find
_beg_date='date -r ${_beg_date_epoch} "${_format}"'
_end_date='date -r ${_end_date_epoch} "${_format}"'

echo "\tbeginning time:\t${_beg_date}"
echo "\tending time:\t${_end_date}"

find / -xdev -newerct "${_beg_date}" ! -newerct "${_end_date}" -ls >${_log}

awk '{n++; s+=$7}END{printf ("\timpact:\t\t%d files\t\t%d bytes\n", n, s) }' ${_log}

Como instalá-lo:

  • cole a fonte acima em crater.sh
  • make crater

Como usar:

/usr/bin/sudo ./crater impact_reference_file delay_around_impact_in_minutes

Exemplo:

/usr/bin/sudo ./crater /Applications/Adobe\ Reader.app
Password:
        reference date: Dec 29 16:11:56 2015
        log:            /var/log/crater_29-12-2015_16:11:56.log
        beginning time: 12/29/2015 16:06:56
        ending time:    12/29/2015 16:16:57
        impact:         1518 files              298217339 bytes

Compatibilidade:

Testado no FreeBSD, MacOS X & Linux.

    
por 04.01.2016 / 19:32
1

How may I make a general and simple forensic script of this method so as to compute the 2 dates useful for the find:

Dec 24 18:39 → 12/24/2015 18:37, 12/24/2015 18:41

Você pode fazer isso usando o recurso date do comando relative time :

$ date -d"Dec 24 18:39 2 minutes ago" +'%m/%d/%Y %R'
12/24/2015 18:37

e

$ date -d"Dec 24 18:39 2 minutes" +'%m/%d/%Y %R'
12/24/2015 18:41

Veja um exemplo de como você pode usá-lo em sua situação. Esse script seria chamado com o diretório, a data de referência e o número de minutos a serem preenchidos em cada lado da data de referência (hora). Chamado desta maneira:

sh ./myscript / "Dec 24/2015 18:39" 2

o script efetivamente executa o comando:

find "/" -newermt "12/24/2015 18:37" ! -newermt "12/24/2015 18:41" -ls

Script:

#!/bin/sh

# usage: $0 directory reference-date minutes

dir=${1:-/}
ref=${2:-Dec 24 18:39}
mins=${3:-2}
format='+%m/%d/%Y %R'

begin=$(date -d"$ref $mins minute ago" "$format")
end=$(date -d"$ref $mins minute" "$format")

echo "# ref='$ref'"
echo "# begin='$begin'"
echo "# end='$end'"

find "$dir" -newermt "$begin" ! -newermt "$end" -ls
    
por 30.12.2015 / 19:06