Trzy lata temu pokazałem na blogu klasyczny SQL Injection: formularz logowania w PHP, sklejane zapytanie i wpisane w pole username „' OR 1=1#. Wróćmy do tamtego kodu i zadajmy inne pytanie: czy dziś dałoby się go tak w ogóle napisać? Bo domyślna ścieżka współczesnego PHP i frameworków – obsługa formularza, ORM, zapytania parametryzowane z pudełka – prowadzi do kodu bezpiecznego, a żeby wstrzyknąć SQL, trzeba dziś z tej ścieżki świadomie zejść. Z uczciwym rozdziałem o tym, gdzie wstrzyknięcie wciąż jest łatwe.
Widziałem rolkę: programiści COBOL-a na bruku, bo AI ich zastąpiło. Postanowiłem sprawdzić, ile w tym prawdy – i okazało się, że mem sklejono z trzech prawdziwych rzeczy w jedno wydarzenie, które się nie zdarzyło. Przy okazji: dlaczego 65-letni język wciąż liczy pieniądze świata, co naprawdę potrafią modele językowe przy starym kodzie, a gdzie obietnica wyprzedza fakty.
We wrześniu 2014 okazało się, że bash – powłoka obecna niemal na każdym serwerze uniksowym – ma błąd pozwalający na zdalne wykonanie kodu. Nie w nowej funkcji, tylko w mechanizmie działającym niezmiennie od 1992 roku, uruchamianym przez wysłużone skrypty CGI. Anatomia podatności, która pokazała, że stare i sprawdzone znaczy bezpieczne tylko do momentu, w którym ktoś każe temu zrobić coś nowego.
Pierwsza część serii o strukturach danych. Jak z funkcji skrótu robi się dostęp w czasie stałym, co się dzieje przy kolizjach, czym różni się łańcuchowanie od adresowania otwartego i dlaczego słownik czasem nagle zwalnia. Kontrakt hash i eq w Pythonie, klucz, który gubi dane, koszt amortyzowany przy rozrastaniu tablicy oraz trzy różne rzeczy nazywane tym samym słowem hash: skrót do wyszukiwania, kryptograficzny i do haseł.
Tabelki złożoności czyta też atakujący. Jak kilka kilobajtów dobranego wejścia zajmuje rdzeń procesora na sekundy: kolizje w tablicach mieszających (HashDoS z 2011 roku), katastrofalny nawrót w wyrażeniach regularnych (27 minut awarii Cloudflare w 2019), pesymistyczny przypadek quicksorta, bomby dekompresyjne i encje XML. Z pomiarami w Pythonie, prawdziwymi liczbami i listą obron, które faktycznie działają.
Narzędzia do monitorowania Debiana: procesy (top, htop), obciążenie CPU (mpstat), pamięć i dysk (vmstat, iostat) oraz ruch sieciowy (iftop). Co i czym sprawdzić.
Konfiguracja ochrony poczty na FreeBSD: SpamAssassin z bazą MySQL (Bayes), ClamAV, Razor oraz Maia-Mailguard (amavisd-new) jako filtr i panel kwarantanny.
Konfiguracja Postfix na FreeBSD: SASL z Dovecot, TLS, domeny i skrzynki wirtualne w MySQL, antyspamowe RBL, oraz PostfixAdmin do zarządzania pocztą przez WWW.
Kompilacja i konfiguracja Dovecot z obsługą MySQL na FreeBSD: POP3/IMAP, SSL/TLS, Maildir, Sieve (Pigeonhole), quota oraz uwierzytelnianie skrzynek z bazy.
Jak działa serwer poczty elektronicznej i z czego się składa: SMTP, POP3/IMAP, Postfix, Dovecot, Apache, MySQL, Roundcube na FreeBSD 13. Część 1 serii.