Zabezpieczanie SuperMicro IPMI BMC

17

Niedawno kupiłem płytę główną SuperMicro X8DTU-F, która ma wbudowaną BMC, która w zasadzie obsługuje system IPMI. Okazuje się, że jest to mały system Linux działający na procesorze ARM.

Niestety działa mnóstwo oprogramowania, którego w większości nie potrzebuję i nie mam możliwości umieszczenia go za zaporą ogniową. Chcę jednak funkcji IPMI. Czy ktoś, kto użył jednego z nich, ma jakieś konkretne sugestie, jak zabezpieczyć to urządzenie? Uruchamia się z systemu plików ROM, a nawet nie wydaje się, aby istniały jakieś haki, aby wyłączyć dowolny z obsługiwanych serwerów ...

Byłbym również zainteresowany tym, w jaki sposób mogę zweryfikować listę nazwisk i haseł, których można użyć do uzyskania dostępu do systemu za pośrednictwem wszystkich różnych usług. Domyślnie jest to ADMIN/ ADMIN, ale żaden z plików w / conf lub / etc nie ma w nich „ADMIN”, co raczej mnie martwi. Są /conf/shadowi /conf/webshadowpliki z tajemniczymi „testowymi” identyfikatorami, co też nie sprawia, że ​​czuję się szczególnie komfortowo.

Curt J. Sampson
źródło
Nie znalazłem jeszcze korelacji między zawartością cienia, cienia i faktycznymi użytkownikami. Nowi użytkownicy dodani za pomocą zarządzania BMC nie pojawiają się w tych plikach. Ponadto użytkownicy „anonimowi”, „test1”, „test2” mają powłokę, która nie istnieje w systemie plików.
Daniel Lawson
2
Zobacz także przewodnik Dana Farmera w IPMI Security Best Practices . Opublikował ostatni artykuł opisujący niektóre znaczące problemy bezpieczeństwa z IPMI zatytułowane ipmi: pociąg towarowy do piekła .
Stefan Lasiewski
1
Dzięki za ten wspaniały link. Krótkie podsumowanie problemów związanych z bezpieczeństwem znajduje się na fish2.com/ipmi/itrain-gz.html, a bardzo krótkie podsumowanie brzmi: „jesteś kompletnie spieprzony ”. Westchnienie.
Curt J. Sampson,

Odpowiedzi:

6

Używanie /conf/crontab, jak zauważył Dlawson, wydaje mi się doskonałym pomysłem. To pozwala mi uruchamiać skrypt raz na minutę, który zapewnia wyłączenie wszystkiego oprócz http i ssh:

/etc/init.d/cdserver stop
/etc/init.d/fdserver stop
/etc/init.d/cim_sfcb stop
/etc/init.d/webgo stop

To wciąż pozostawia mi serwer sieciowy z kontrolą dostępu opartą na hasłach (nie widzę sposobu, aby zweryfikował certyfikaty klienta) i kto wie, jakie luki zdalne. Wyłączenie go, gdy go nie używam (przez większość czasu) wydaje się rozsądnym rozwiązaniem; dodanie wpisu crontab w celu wyłączenia go co pięć lub dziesięć minut wychwyciłoby przypadki, w których ktoś zapomniałby go zamknąć, gdy skończy.

Demon ssh to wersja dropbear, która wydaje się dość mocno zmodyfikowana. Odczytuje nazwy użytkowników i hasła w postaci zwykłego tekstu /conf/PMConfig.dat(który jest również używany przez serwer WWW), loguje się pod dowolnym prawidłowym nazwiskiem i hasłem jako użytkownik root i ignoruje ~/.ssh/authorized_keysplik. Ten ostatni problem jest denerwujący; zmusza cię do zezwalania na logowanie się hasłem i otwiera możliwość tylnych drzwi w zależności od tego, skąd bierze wszystkie swoje nazwy i hasła.

Więc to jest dylemat, przed którym stoisz: na ile naprawdę ufasz temu zmodyfikowanemu demonowi ssh zainstalowanemu w systemie, który został dość wyraźnie zaprojektowany przez naiwnych programistów? Niewiele, biorąc pod uwagę liczbę połamanych kawałków crufta, które widziałem w ich skryptach powłoki. Istnieją nietypowe konwencje nazewnictwa (/etc/rc?.d/sshd to dowiązanie symboliczne do /etc/init.d/ssh), ogromna ilość kodu, który wydaje się nieużywany, oraz funkcje tylko w skrypcie startowym ssh, takie jak /conf/portcfg_sshplik a nawet restartpolecenia są całkowicie zerwane. (Nie próbuj ich używać; sshd nie uruchomi się ponownie i zostaniesz wkręcony, chyba że masz istniejący login. Ponownie uruchomiliśmy BMC i musieliśmy go ponownie załadować).

Najlepszą opcją, o której mogę pomyśleć, jeśli w ogóle zamierzasz korzystać z tej rzeczy, jest uruchomienie ssh na alternatywnym porcie za pomocą zadania cron, więc przynajmniej jest mniej prawdopodobne, że pojawią się w skanerze portów.

Ostatnim elementem są porty zarządzania siecią IPMI; Nie widzę, jak je wyłączyć.

Curt J. Sampson
źródło
Większość twoich obaw dotyczących modyfikacji prawdopodobnie nie stanowi problemu. Dropbear używa pam, które używają libpamipmi do uwierzytelniania - nie widziałem żadnych dowodów na to, że odczytuje bezpośrednio hasła w postaci jawnego tekstu. Libpamipmi wykona wywołanie ipmi do stosu ipmi i może to być odczytanie haseł w postaci czystego tekstu, ale chodzi mi o to, że nie wygląda na to, że demon dropbear został spieprzony. Chciałbym jednak usłyszeć w jakimkolwiek ostatecznym dowodzie przeciwnym.
Daniel Lawson
Wiemy, że zostało to zepsute, ponieważ nie ma sposobu, aby a) użyć kluczy zamiast haseł ib) wyłączyć uwierzytelnianie hasła.
Curt J. Sampson
6

Idealnie, twoja sieć zarządzania byłaby inną siecią niż twoja inna sieć lub przynajmniej innym VLAN z ograniczonym dostępem do tras.

Te systemy nie obsługują tak wielu usług:

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
555/tcp  open  dsf
5120/tcp open  unknown
5900/tcp open  vnc
5988/tcp open  unknown
MAC Address: 00:30:48:D9:3A:71 (Supermicro Computer)

(i UDP / 623 dla samego IPMI)

Większość z nich jest potrzebna, jeśli chcesz wykonać jakiekolwiek zdalne zarządzanie. Jeśli nie chcesz wykonywać zdalnego zarządzania, powinieneś rozważyć całkowite wyłączenie kontrolera IPMI lub zakup płyty X9DTU (-F oznacza „wbudowaną BMC”)

Jeśli chcesz wykonać pełne zdalne zarządzanie, nie możesz uruchomić kontrolerów IPMI w innej sieci i nadal chcesz zablokować pewien dostęp, zawsze możesz poprosić kontroler IPMI o wykonanie poleceń iptables. Możesz wykonać skrypt logowania do ssh w celu wykonania poleceń lub poprosić Supermicro o zestaw devkit dla BMC i zbudować nowy obraz za pomocą niestandardowego skryptu iptables.

AKTUALIZACJA

Po raz kolejny przyjrzałem się naszym systemom, a system plików / conf jest zamontowany rw. Żaden ze skryptów inicjujących nie wywołał niczego bezpośrednio w / conf (co mogłem zobaczyć), ale istnieje plik crontab. Myślę, że możesz skopiować w skrypcie iptables i edytować / conf / crontab, aby wywoływać go w odpowiednich odstępach czasu. Chciałbyś, żeby działał jak najszybciej na BMC init, ale niekoniecznie chcesz, żeby działał co minutę. A może nie obchodzi cię to.

Daniel Lawson
źródło
Chciałbym mieć oddzielną sieć do zarządzania, ale niestety trafia ona do czyichś centrum danych i nie mogę tego mieć. Jeśli chodzi o zarządzanie, wszystko, czego naprawdę chcę, to https i ssh.
Curt J. Sampson,
Nigdy, nigdy nie będziesz chciał KVM ponad LAN?
Daniel Lawson
Możesz mieć oddzielną zaporę ogniową przed hostem w DC. To nieco rozwiązałoby problem. Czy poprosiłeś Supermicro o wsparcie w tym zakresie? Uważam, że reagują dość szybko
Daniel Lawson
Nie. Nie potrzebuję KVM przez LAN, ponieważ BIOS, Grub i jądro Linuksa obsługują konsolę szeregową.
Curt J. Sampson,
4

Jedną rzeczą do rozważenia przy zabezpieczaniu Supermicro IPMI jest serwer ssh. Starsze wersje kodu IPMI X8SIL-F akceptowały połączenia ssh bez względu na podane hasło. Oprogramowanie sprawdzi następnie hasło i odrzuci lub zaakceptuje połączenie, ale pojawiło się krótkie okno do utworzenia portu ssh do przodu. Z tego powodu ludzie otrzymywali skargi na spam / nadużycia dotyczące adresów IP IPMI . W przypadku płyty głównej X8SIL-F wersja oprogramowania wewnętrznego IPMI 2.60 rozwiązała problem (mógł zostać naprawiony wcześniej, wpis w dzienniku zmian 2.54 wygląda na to, że tak może być).

Drugi problem to anonimowy użytkownik z domyślnym hasłem. Wygląda na to, że anonimowy użytkownik został naprawiony w wersji oprogramowania 2.22.

ddrown
źródło
2

Jest mała sztuczka, aby włączyć HTTPS dla interfejsu internetowego IPMI.

Jeśli oprogramowanie wewnętrzne IPMI obsługuje to (moje oprogramowanie 2.04 dla X8DTH-iF obsługuje), możesz najpierw włączyć dostęp HTTPS, przechodząc do Konfiguracja -> SSL, przesyłając dwa pliki PEM (certyfikat i klucz prywatny), a po drugie ręcznie zrestartuj moduł IPMI.

Wreszcie można uzyskać dostęp do interfejsu internetowego IPMI za pomocą https: // bmc-ip-or-hostname / . Nie mogę powiedzieć, że HTTPS działa wolniej niż HTTP.

AntonioK
źródło
0

Czy któryś z was próbował zabezpieczyć to za pomocą iptables? Wygląda na to, że iptables jest zainstalowany i chcę stworzyć zestaw reguł, który odrzuca wszystko, co akceptuje kilka zaufanych adresów IP, aby uczynić je trochę bardziej bezpiecznym ... Ale jak czytam powyżej, żadne skrypty nie są odczytywane z / config. Czy crontab jest jedyną opcją? A co jeśli pomieszałeś iptables?


źródło
1
Jak powiedziałem wcześniej, o wiele lepiej jest zabezpieczyć kontroler IPMI zewnętrznie: albo przez umieszczenie go w całkowicie oddzielnej sieci vlan lub fizycznej, albo przez zaporę graniczną. Ten konkretny model kontrolera IPMI / BMC działa pod Linuksem, który następnie podpowiada, że ​​możesz zabezpieczyć go za pomocą iptables. Rzeczywistość jest jednak taka, że ​​zdecydowana większość BMC / IPMI / cokolwiek ich wywołuje, nie ma wiele, ani nic, w sposobie zapory ogniowej, więc nie powinieneś na tym polegać. Oszczędź sobie kłopotów i traktuj swoją sieć IPMI jako prywatną, zabezpieczoną i bez trasy.
Daniel Lawson
1
Nie zgadzam się, że „lepiej” zabezpieczyć kontroler IPMI na zewnątrz; zapory ogniowe i tym podobne są bardziej podatne na awarie bezpieczeństwa niż host, który jest odpowiednio zabezpieczony. Jeśli jednak masz możliwość korzystania z oddzielnej sieci, to dobrze, a w przypadku takich urządzeń IPMI, jak ta, wydaje się to niemal niezbędne.
Curt J. Sampson
0

Jak obejrzałeś system plików? Jeśli telnet do portu 22, widzę, że dropbear działa, ale jeśli spróbuję SSH z różnymi nazwami użytkowników, nie będzie monitował o hasło. Dodałem nowego użytkownika z uprawnieniami administratora, ale SSH też nie zareaguje na tego użytkownika. Używam płyty głównej Supermicro X7SPA-HF, która ma układ Winbond Hermon IPMI 2.0, wersja oprogramowania 01.29, czas kompilacji 2009-12-31.


źródło
2
Zrobiłem ssh -v, aby zobaczyć, co się dzieje, zobaczyłem, że próbuje uwierzytelnić klucz publiczny. Uruchomiłem to, wyłączając to.
Jestem teraz w ATEN SMASH-CLP System Management Shell, wersja 1.00