Mój audyt bezpieczeństwa zawieszał się każdej nocy

Mój nocny audyt bezpieczeństwa przestał działać.

Zadanie cron uruchamiało się każdego ranka o 5:39. Skrypt startował. Logi nie pokazywały niczego. Żadne błędy się nie pojawiały. Żaden raport nie został zapisany w pliku.

Spędziłem dwa dni na debugowaniu. Rozwiązanie zajęło tylko trzy linie w bashu.

Problemem była cicha awaria.

Mój skrypt wykonuje 13 kontroli. Jedna z nich wywołuje głęboki audyt bezpieczeństwa za pomocą CLI. To polecenie zawieszało się. Nie zgłaszało błędu. Po prostu czekało w nieskończoność.

CLI oczekiwało odpowiedzi z bramy (gateway). W środowisku cron ta odpowiedź nigdy nie nadeszła. CLI nie posiada wewnętrznego limitu czasu (timeout). Zablokowało to cały skrypt. Ponieważ skrypt nigdy się nie zakończył, nigdy nie dotarł do linii zapisującej raport.

Naprawiłem to za pomocą tych zmian:

  • Użyłem timeoutu dla polecenia.
  • Zmieniłem komunikat błędu na „command timed out” zamiast „not available”.
  • Użyłem set -eo pipefail, aby poprawnie wyłapywać błędy.

Teraz raport dociera na czas. Jeśli audyt się zawiesi, raport i tak zapisuje pozostałe 12 metryk. Częściowy raport jest lepszy niż żaden raport.

To nauczyło mnie trzech rzeczy na temat piaskownicy agentów (agent sandboxing):

  1. Nigdy nie ufaj, że zależność zgłosi błąd w sposób wyraźny. Jeśli wywołujesz zewnętrzne narzędzie w zadaniu cron, zawsze ustaw limit czasu (timeout). Wszystko musi mieć ograniczony czas oczekiwania.

  2. Projektuj z myślą o częściowym sukcesie. Upewnij się, że Twój system zapisuje raport, nawet jeśli jedna część zawiedzie.

  3. Unikaj cichych awarii. Wyraźna awaria Cię obudzi. Cicha awaria sprawi, że przeoczysz krytyczne dane, dopóki nie będzie za późno.

Kiedy dajesz agentowi uprawnienia do uruchamiania poleceń, przejmujesz każdy tryb awarii tych poleceń. Zawieszenie się narzędzia to zawieszenie całego Twojego potoku (pipeline).

Bezpieczeństwo to nie tylko powstrzymywanie złośliwych aktorów. To także dbanie o to, by Twoja infrastruktura zgłaszała awarie wystarczająco głośno, abyś mógł je zauważyć.

Jeśli uruchamiasz zautomatyzowane skrypty wywołujące zewnętrzne narzędzia, sprawdź swoje limity czasu (timeouts) w tym tygodniu.

Źródło: https://dev.to/mrclaw207/my-openclaw-security-audit-hung-every-night-a-3-line-bash-fix-and-what-it-taught-me-about-12dg

Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi