Nowe posty

Autor Wątek: Ulepszanie skryptu.  (Przeczytany 358 razy)

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2060
  • 1709
    • Zobacz profil
Ulepszanie skryptu.
« dnia: 2018-11-18, 14:00:42 »
Zrobilem sobie taki skrypt side (Simple Intrusion Detection Environment)
( na własne potrzeby )

#!/bin/bash
# Licence: GPLv3

error1(){
echo "$@" ; exit 1
}

# Check if sha256sum is installed
[ "$(sha256sum --version)" ] || error1 "--> You need install sha256sum"

#========================={
side_verify() {
echo "--> Verify base with local hash"
sha256sum -c dat/hash.base.org.sum || error1 "--> Error: Verify hash.base.org FAILED"
sha256sum -c dat/perm.base.org.sum || error1 "--> Error: Verify perm.base.org FAILED"

echo "--> Verify base with on-line hash"
# tr -d '\r' will remove "CRLF line terminators"
curl -v --silent https://pastebin.com/i6kzUJtp --stderr - | grep " dat/hash.base.org" | sed -e 's/<[^>]*.//g' | tr -d '\r' \
| sha256sum --check || error1 "--> Error: Verify hash.base.org FAILED"
curl -v --silent https://pastebin.com/i6kzUJtp --stderr - | grep " dat/perm.base.org" | sed -e 's/<[^>]*.//g' | tr -d '\r' \
| sha256sum --check || error1 "--> Error: Verify perm.base.org FAILED"
}


#========================={
side_create() {
mkdir -p ./dat
[ -e dat/hash.base ] && rm dat/hash.base
[ -e dat/perm.base ] && rm dat/perm.base

#VAR5="/path/"
#VAR="-not -path \"${VAR5}\""
#echo $VAR

#NOT_FIND_IN="-not -path "/proc/*" -not -path "/home/*" -not -path "/var/*" \
#-not -path "/run/*" -not -path "/media/*" -not -path "/mnt/*" "
FIND_IN="/"

# You need check paths and adapt to your own needs
#echo "find "$FIND_IN" -type f -ls ${NOT_FIND_IN}"
find "$FIND_IN" -type f -not -path "/proc/*" -not -path "/home/*" -not -path "/var/*" \
-not -path "/run/*" -not -path "/media/*" -not -path "/mnt/*"  -not -path "/sys/*" \
-not -path "/tmp/*" -not -path "/dev/*" -exec sha256sum {} \; | tee -a dat/hash.base  | \
awk '{ print $2 }' | xargs ls -l | tee -a dat/perm.base
}
#=========================}

#========================={
side_move() {
mv dat/hash.base dat/hash.base.org
mv dat/perm.base dat/perm.base.org


echo "--> PLEASE sent hash files to inaccessible place, for example on paste.bin manualy"
echo "and save links to verify your database."
sha256sum dat/hash.base.org > dat/hash.base.org.sum
sha256sum dat/perm.base.org > dat/perm.base.org.sum
cat dat/hash.base.org.sum
cat dat/perm.base.org.sum
}
#=========================}

#========================================================================================={
case $1 in
"--firstinit"|"-f")
side_create
side_move
;;
"--check"|"-c")
side_verify
side_create
echo "######################################################"
echo "    "
echo "--> Changes in files:"
echo "    "
diff dat/hash.base dat/hash.base.org
diff dat/perm.base dat/perm.base.org
;;
"--help"|"-h")
echo "--firstinit"
echo "--check"
;;
*)
echo " Error: unknown option"
echo " Try use: $0 --help"
exit
;;
esac
#=========================================================================================}

Czy mozna jeszcze jakos go ulepszyc ?

1. Skrypt bedzie uruchamiany jako root,
wiec nie jestem pewien czy zmienna np.  FIND_IN moze byc tak zapisana.
2. Chcialem zeby skrypt byl bardziej przejrzysty,
 np. zapisanie sciezek (  "/proc/*"  "/home/*" ) do pliku konfiguracyjnego ale komenda find obraza sie na moje zmienne
i tablica nie chce nic zapisac w sobie w petli while.
3. Skrypt narazie nie potrafi wyslac hash przez curl, trzeba wkleic recznie,  a fpaste czy czegos podobnego nie mam i narazie nie bede kompilował.


Edytowane
Przydalaby sie aplikacja na telefon do skanowania i weryfikowania hashy na telefonie :D
Dzieki temu nie musialbym zapisywac hashy w sieci.


Edytowane
- A moze by fragment z linkami zmienic w ten sposob ?
 su -c "id; curl -v --silent https://pastebin.com/i6kzzJtz --stderr - | grep ' dat/perm.base.org' | sed -e 's/<[^>]*.//g' | tr -d '\r' | sha256sum --check" nobody || echo "Error jakis"
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
dat/perm.base.org: OK
- Linki nie sa dlugie, moglbym robic sobie ich zdjecia w celu weryfikacji, czy ktos ich nie podmienil,
No chyba ze ktos popsuje tak system, ze tylko z ISO / live-USB poprawna weryfikacja bedzie mozliwa ...
« Ostatnia zmiana: 2018-11-18, 20:55:06 wysłana przez 1709 »
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline marcin'82

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 248
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #1 dnia: 2018-11-19, 17:05:50 »
Odnośnie tego fragmentu:
Cytuj
# You need check paths and adapt to your own needs
#echo "find "$FIND_IN" -type f -ls ${NOT_FIND_IN}"
find "$FIND_IN" -type f -not -path "/proc/*" -not -path "/home/*" -not -path "/var/*" \
-not -path "/run/*" -not -path "/media/*" -not -path "/mnt/*"  -not -path "/sys/*" \
-not -path "/tmp/*" -not -path "/dev/*" -exec sha256sum {} \; | tee -a dat/hash.base  | \
awk '{ print $2 }' | xargs ls -l | tee -a dat/perm.base

Można krócej:
find /* -type f -regextype posix-egrep ! -regex '/(dev|home|media|mnt|proc|run|sys|tmp|var)/.*' -exec sha256sum {} > sumy \;

Wysłanie wyniku na serwer, na przykład ptpb (podług Arch Wiki):
sha256sum sumy | curl -F c=@- https://ptpb.pw

Magia druciarstwa - wyciągamy link :D
sha256sum sumy | curl -F c=@- https://ptpb.pw | grep url | awk '{print $2}'

Porównanie wyników, na przykład:
diff <(echo "$(sha256sum PLIK)") <(echo "$(curl --silent LINK)"); echo $?
marcin82

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2060
  • 1709
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #2 dnia: 2018-11-19, 18:06:04 »
Ladnie wyglada :]
A daloby sie te linki zczytac z pliku albo wpisac je w jednej kolumnie ?
Bo jesli np. usune /home  i  dodam
/home/x/.xsession-errors
/home/x/.pulse
/home/x/.mozilla
//home/x/.tmp
//home/x/.cache
to moze sie nie zmiescic w jednej linii.


Edytowane
A moze tak by ladniej wygladalo ?
find "$FIND_IN" -type f \
-not -path "/proc/*" \
-not -path "/var/*" \
-not -path "/run/*" \
-not -path "/media/*" \
-not -path "/mnt/*"  \
-not -path "/sys/*" \
-not -path "/tmp/*" \
-not -path "/dev/*" \
-not -path "/home/x/.xsession-errors" \
-not -path "/home/x/.pulse/*" \
-not -path "/home/x/.mozilla/*" \
-not -path "/home/x/.tmp/*" \
-not -path "/home/x/.cache/*" \
-exec sha256sum {} \;
« Ostatnia zmiana: 2018-11-19, 18:33:35 wysłana przez 1709 »
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline marcin'82

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 248
    • Zobacz profil
Odp: Ulepszanie skryptu.
« Odpowiedź #3 dnia: 2018-11-19, 18:33:27 »
Jak tobie lepiej pasuje. Można podać wielokrotnie różne wzory, można ubrać je w zmienne, itd.:
find /var/log/* -type f -regextype posix-egrep -not -regex '.*(s|n)mbd.*' -not -regex '.*(1|2|3|4).*'
/var/log/auth.log
/var/log/btmp
/var/log/crond.log
/var/log/daemon.log
[...]

To 1,2,3,4 lepiej by było podać jako zakres zamiast wyliczanki. Jak wiesz ja mam jobla na punkcie zero komentarzy w skryptach i najkrócej jak się da. Jak dla ciebie czytelniej to tak poprzerabiaj. To jest tylko kosmetyka (ale jest krócej)- najważniejsze, że "łapie" wszystkie pliki, które ma znaleźć.

Każdy ... Co kraj to obyczaj :D
« Ostatnia zmiana: 2018-11-19, 18:41:11 wysłana przez marcin'82 »
marcin82