Nie upewniasz się, że wszystkie aktualizacje zabezpieczeń zostały zastosowane? Pamiętaj, że jako obrońca musisz wygrać w 100% . Haker musi wygrać tylko raz.
Kroki, które wymieniłeś, są również o wiele łatwiejsze do powiedzenia niż wykonania (z wyjątkiem kwestii hasła ... a mimo to ludzie nadal wybierają okropne hasła!).
2) Co to jest „wiarygodne źródło” dla publicznego serwera internetowego? Cały Internet? Cały Internet bez Chin / Rosji (/ niektórych / innych / krajów)? Zautomatyzowane systemy mogą wykryć wiele typów ataków, ale podobnie jak programy antywirusowe mogą zajść tylko do tej pory.
3) Monitorowanie plików lokalnych jest dobre, ale znowu nie jest to panaceum. Co się stanie, jeśli atakującemu uda się wstrzyknąć kod do serwera WWW, a następnie użyje błędu jądra, aby pobrać kod do jądra ... bez zapisywania pliku na dysku? W tym momencie mogli zapisywać pliki na dysku i używać zestawu głównego, aby większość (teoretycznie wszystkie ) skanów online nie zauważyła żadnych zmian w systemie.
I nawet jeśli uda im się tylko wykorzystać serwer sieciowy, mogą zrobić wszystko, co może zrobić serwer sieciowy (co może i tak być wszystkim zainteresowanym atakującym).
4) Powinieneś zawsze sprawdzaj poprawność danych wejściowych użytkownika. Większość programistów o tym wie (i wielu próbuje to zrobić). Niestety, o wiele łatwiej jest powiedzieć niż zrobić, dlatego nadal widzimy problem za problemem, w którym dane wejściowe użytkownika nie są odpowiednio weryfikowane. Nigdy nie będziesz w stanie zagwarantować, że jakikolwiek prawdziwy program poprawnie sprawdza wszystkie dane wprowadzone przez użytkownika. Przeczytaj kilka pytań PHP + MySQL w witrynie StackOverflow, aby zobaczyć, ile osób uważa, że mysqli_real_escape_string ()
zapobiega wszystkim atakom typu SQL injection ( "where ID =". $ Val
jest podatne na ataki, nawet jeśli $ val
jest wynikiem działania mysqli_real_escape_string
!).
Nawet gdybyś mógł (nie możesz) upewnić się, że każdy znany wektor ataku jest chroniony, nie możesz zrobić nic więcej niż dzikie kołysanie się w ciemności przeciwko nieznanemu-nieznanemu (cóż, ciągłe uczenie się pomaga).
Jako przykład, gdzie twoja obrona nic by nie zrobiła, brałem udział w kursie bezpieczeństwa, podczas którego robimy „gry wojenne”. Udało mi się zrootować serwer drużyny przeciwnej, ponieważ udało mi się usunąć jedno z haseł ich użytkowników z innej maszyny (jeden z nich schrzanił i przez pomyłkę wpisał w bash jako polecenie, a oni nigdy nie pomyśleli aby usunąć go z .bash_history
).
Stamtąd sfałszowałem adres IP maszyny, z której zwykle się logowali, i włączyłem SSH, wprowadzając ich nazwę użytkownika i hasło. Miałem ograniczony dostęp do systemu. Następnie uruchomiłem sudo vim
, ponownie wprowadziłem to samo hasło i kazałem vimowi odrodzić powłokę bash. Tada! Dostęp do roota z wiarygodnego źródła, bez modyfikowania jakichkolwiek plików lokalnych w nietypowy sposób, bez wykorzystywania słabego hasła (było złe, ale nawet najlepsze hasło na świecie nie pomogłoby), ani polegania na niewalidowanych danych wejściowych użytkownika.
W tym momencie, będąc złośliwym dla mnie, ręcznie zmodyfikowałem wszystkie pliki dziennika związane z moim legalnym loginem i usunąłem ich IDS (założę się, że nie będą wystarczająco spostrzegawczy, aby zauważyć, że wymieniłem wszystkie jego pliki binarne z kopiami / bin / true
!). „Prawdziwy” haker byłby prawdopodobnie znacznie lepiej przygotowany, aby zapewnić, że jego aktywność nie zostanie wykryta przez bardziej czujnych administratorów, ale już osiągnąłem swój cel, a mała część mnie chciała, żeby dowiedzieli się, że ktoś go dostał.