Poddanie całego serwera linux kontroli źródła (git)

17

Zastanawiam się nad poddaniem całego serwera linux kontroli wersji za pomocą git. Jest to spowodowane tym, że może to być najłatwiejszy sposób na wykrycie złośliwych modyfikacji / rootkitów. Wszystko, co naiwnie uważam za konieczne, aby sprawdzić integralność systemu: montuj partycję linux co tydzień za pomocą systemu ratunkowego, sprawdź, czy repozytorium git nadal nie jest ulepszane, a następnie nadaj status git, aby wykryć wszelkie zmiany wprowadzone w systemie .

Czy oprócz oczywistych marnotrawstwa miejsca na dysku są jeszcze jakieś negatywne skutki uboczne?

Czy to całkowicie szalony pomysł?

Czy to nawet bezpieczny sposób na sprawdzenie przed rootkitami, ponieważ najprawdopodobniej musiałbym przynajmniej wykluczyć / dev i / proc?

Tobias Hertkorn
źródło
5
Głosowałbym za „całkowicie szalonym pomysłem”, zbyt wiele implikacji. Zmiany w plikach będą pojawiać się cały czas i sprawią, że procedury aktualizacji staną się koszmarem.
forcefsck 17.03.11
@forcefsck - dlaczego zmiany plików miałyby występować cały czas? Czy nie powinny wystąpić po prostu podczas aktualizacji systemu?
Tobias Hertkorn,
1
Tylko myśl, dlaczego nie użyć czegoś takiego jak dirvish lub rsync z --link-dest? Jeśli użyjesz narzędzia dirvish do tworzenia kopii zapasowych, otrzymasz miły raport dla każdej kopii zapasowej pokazujący zmiany. Możesz rsync w trybie --dry-run, aby porównać bieżący stan z kopią zapasową. Jeśli używasz dirvish, będziesz używać narzędzia, które zostało dobrze przetestowane jako system kopii zapasowych.
Zoredache,

Odpowiedzi:

16

To „zły pomysł” (tm). Oprócz wszystkich innych, twoje repozytorium będzie działało wolno, jak tylko do cholery, i będzie się pogarszać wraz z każdą aktualizacją.

Spróbuj scentralizowanego zarządzania, takiego jak marionetka / cfengine / szef kuchni. Pozwoli to zachować wszystko zgodnie z oczekiwaniami i cofnąć nieoczekiwane zmiany.

Połącz to z czymś takim jak iwatch, aby otrzymywać e-maile z nieautoryzowanymi zmianami plików.

W razie potrzeby połącz to z plikami rpm / deb, aby uruchomić niestandardowe aplikacje.

Od czasu do czasu wrzuć coś takiego jak rkhunter lub chkrootkit, by zacząć kopać i powinieneś być gotowy.

Zadanie wykonane.

Sirex
źródło
+1 za zły pomysł - scentralizowane zarządzanie (marionetka / cfengine / chef / radmind / itp.) Daje możliwość upewnienia się, że system jest skonfigurowany zgodnie z określonymi wymaganiami, a większość z nich może być również używana jako „tripwire” wpisz system, aby powiedzieć ci, kiedy rzeczy się zmieniają, które nie powinny.
voretaq7
Myślę, że to naprawdę zły pomysł. Ok, możesz zobaczyć, które pliki są nowe i zmienione. Ale jeśli uruchomisz git, potrzeba dużo procesora, aby rozpakować i obliczyć pliki. Jeśli zrobisz to na całej maszynie, zajmie to dużo czasu.
René Höhle,
1
Rzucę kolejną na tę listę; etckeeper zrobi repozytorium git, z wyjątkiem tylko / etc.
Shane Madden
repozytoria takie jak git są niewiarygodnie szybkie. I nie martwię się o procesor ani we / wy, ponieważ serwer, o którym myślę, ma zaplanowane przestoje (stąd możliwość zamontowania go za pomocą systemu ratunkowego)
Tobias Hertkorn,
Czego nie rozumiem: w jaki sposób scentralizowane systemy zarządzania gwarantują, że nie ma fałszywych alarmów - system jest zagrożony + narzędzia użyte do sprawdzania systemu są zagrożone = fałszywie pozytywne
Tobias Hertkorn
5

Inną alternatywą jest skonfigurowanie tripwire , czyli oprogramowania GPL, które przegląda wszystkie ważne pliki w twoim systemie i określa, które zmieniły się w sposób, który określiłeś jako niedopuszczalny. Zmianę można zdefiniować jako mtime, poprzez numer i-węzła, aż do kryptograficznie silnych sum kontrolnych.

Trwa konfiguracja i dostrajanie, jeśli nie chcesz co noc otrzymywać wielu raportów o /var/runzmianach w plikach , zmianach w plikach klienta DHCP /etcitp., Ale jeśli napotkasz takie problemy, może to być naprawdę bardzo pomocny.

Baza właściwości pliku jest podpisany za pomocą klucza nie wiadomo, maszyny, dzięki której można mieć pewność, że żadne narzędzie złośliwie zmienił bazy danych lub binaria Tripwire. Aby uzyskać całkowitą pewność, możesz wypalić kopię narzędzi tripwire i baz danych na nośniku tylko do odczytu, który można zamontować na serwerze i użyć do zweryfikowania wszystkich zmian od czasu nagrania dysku, jeśli konieczna jest pełna analiza kryminalistyczna.

Jeśli masz zamiar to zrobić, bardzo ważne jest skonfigurowanie i uruchomienie tripwire przed wdrożeniem maszyny do produkcji, lub nigdy nie możesz być całkowicie pewien, że jakiś złośliwy użytkownik nie miał szansy zainfekować maszyny przed nią był tripwired.

Szalony Kapelusznik
źródło
3

Nie sądzę, że to prawdopodobnie zadziała, ale jako eksperyment chciałbym zobaczyć, co się stanie, jeśli zrobisz to tylko z folderem / etc. Tam przechowywana jest większość informacji o konfiguracji.

Joel Coel
źródło
4
Trwa właśnie / etc. Sprawdź kitenet.net/~joey/code/etckeeper (etckeeper)
Tobias Hertkorn
1
etckeeper działa naprawdę ładnie, uważam to za bardzo przydatne.
Zoredache,
2

@Sirex podał już bardzo dobrą odpowiedź, ale jeśli chcesz zrobić krok dalej w kwestii bezpieczeństwa, najlepszym sposobem na poradzenie sobie z tym jest najpierw zapobieganie, a następnie wykrywanie.

Spróbuj skonfigurować system z / system plików zamontowanym tylko do odczytu. Uczyń / tmp oddzielnym ramfsem zamontowanym z opcją noexec, nodev. Aby system działał, tak naprawdę potrzebujesz tylko / var do zamontowania odczytu i zapisu. Więc pod / var zamontuj fs z rw, noexec, nodev i usuń uprawnienia do zapisu do / var / tmp (afaik, rzadko jest potrzebny demonom i powinien być konfigurowalny). Użyj również poprawki bezpieczeństwa dla swojego jądra, aby dodatkowo ograniczyć dostęp użytkowników do zasobów, spróbuj na przykład grsec. Użyj zapory ogniowej z możliwie najbardziej restrykcyjnymi regułami.

Niektóre dystrybucje zawierają obszerną dokumentację dotyczącą hartowania systemu. Na przykład:

forcefsck
źródło
0

Myślę, że dobrym pomysłem jest przeanalizowanie zmian, które narzędzie wprowadza w twoim systemie:

  1. zainstaluj goły system Linux na maszynie wirtualnej
  2. zainicjuj root git
  3. zainstaluj narzędzie, które chcesz przeanalizować
  4. zobacz wszystkie zmiany w rzucie wykonane w twoim systemie

... Usuń maszynę wirtualną

Trzeba jednak dodać wiele folderów do .gitignore pliku, takich jak proc itp.

rubo77
źródło
0

W sytuacjach, w których chcesz tylko utrzymać określone foldery w całym systemie plików pod kontrolą wersji, może działać następujące podejście:

Najpierw utwórz repozytorium Git na /poziomie:

$ cd /
# git init

Następnie utwórz listę, /.gitignorektóra ma tylko niektóre foldery, na przykład tylko na białej liście /path/to/versioned/config/folder/(na podstawie /programming//a/11018557/320594 ):

/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore

Następnie utwórz pierwsze zatwierdzenie:

# git add -A
# git commit -m "Initial commit"

A następnie dodaj dodatkowe foldery, które chcesz kontrolować na żądanie.

PS:

Oprócz poprzedniej metody, jeśli chcesz zachować / etc / pod kontrolą wersji, możesz użyć etckeeper( https://etckeeper.branchable.com/ ) do wersjonowania tego konkretnego folderu, ponieważ jest on bardziej wyspecjalizowany do tego celu ( np. uruchamia się automatycznie po zainstalowaniu pakietów).

Jaime Hablutzel
źródło