imitatio creatio co we łbie piszczy

18Sep/06Off

remote integrity checker

Problem:
Chcemy monitorować zdalnego hosta, tak aby uniknąć nieautoryzowanych zmian w filesystemie.

Rozwiązaniem jest oprogramowanie typu "system integrity checker". najbardziej znany był chyba Tripwire, w tej chwili jest tego mnóstwo ale ja wybrałem AIDE.

Aby uniknąć dodatkowego ryzyka oraz umozliwić centralizację, program skanujący oraz jego bazy sygnatur przechowujemy na dedykowanym, bezpiecznym serwerze. Na skanowane hosty kopiujemy tylko na czas skanowania plik wykonywalny (zlinkowany statycznie aby uniknąć zatrutych bibliotek).

Oczywiście takie skanowanie nie jest doskonałe. Włamywacz mógł zatruć samo jądro nadpisując funkcje stat, fopen itd tak ze ukrywają wprowadzone przez niego zmiany.

Najlepiej utworzyć wzorcową bazę w momencie instalacji monitorowanego hosta, a potem cyklicznie ją porównywać z bieżącą. Zautoryzowane zmiany można potwierdzać poprzez commit (patrz skrypt aide.sh )

Instalacja krok po kroku

  1. Pobieramy AIDE i instalujemy lokalnie, np.

    ./configure --prefix=/usr && make
    su
    checkinstall || make install
  2. Na każdym monitorowanym (zdalnym) hoście musi być zainstalowane ssh oraz sudo.
  3. Ustawiamy sobie bezhasłowy dostęp do zdalnego hosta za pomocą ssh (autoryzacja za pomocą kluczy)
  4. Poprzez visudo dodajemy następującą linię:
    filip ALL = NOPASSWD: /var/tmp/aide

    Uwaga: mozna zmienić ścieżkę /var/tmp/ na inną, ale ze względu na ograniczenia sudo musi być ona bezwzględna, więc niestety ./ odpada.
  5. zakładamy lokalnie katalog aide, w którym będziemy trzymać wszystkie dane dotyczące hostów zdalnych
  6. umieszczamy w nim dla każdego monitorowanego hosta plik konfiguracyjny o nazwie aide_HOST.conf.
    # man aide.conf(5)
    database=stdin
    database_out=stdout
    report_url=stderr
    #
    /bin R
    /boot R
    /dev L
    /etc R
    /lib R
    /root R
    /sbin R
    /usr R
  7. umieszczamy w nim skrypt aide.sh
  8. chmod +x aide.sh
  9. Inicjalizujemy bazę sygnatur: ./aide.sh HOST init
  10. dopisujemy do swojego crontaba:
    0 6 * * * ( cd $HOME/aide && ./aide.sh HOST scan )
  11. należy upewnić się że odbieramy maile które wysyła do nas cron.