Härdade SSH till 24 kontrollerade direktiv med validering i tre steg — kandidatfilen, den sammansatta konfigurationen och sedan daemonens egen återläsning — efter att återläsningen hade avslöjat att den körande servern tyst åsidosatte två av de tjugofyra.
Arbetet utfört: september 2026
24 SSH‑direktiv, kontrollerade och sedan återlästa från daemonen
Situation. SSH är den enda interaktiva vägen in på företagets värd, och dess konfiguration skrivs av en automatiseringsroll som i månader hade gått felfritt. En åtkomstrapport i september 2026 läste av de inställningar som daemonen själv faktiskt tillämpade och fann två som avvek från det rollen hade skrivit vid varje enskild konvergenskörning.
Uppgift. Härdningen måste bli något som daemonen bekräftar snarare än något som repot påstår, eftersom glappet mellan de två redan hade stått öppet i månader utan att någon märkt det.
Handling. Orsaken var konfigurationens ordningsföljd. Operativsystemet levereras med egna standardvärden som inte är bortkommenterade, ovanför det ställe där en drop‑in‑fil hamnar, och för de två inställningarna i fråga vinner den första förekomsten. Lösningen var ett filnamnsprefix som sorteras före leverantörens, en ändring i storleksordningen ett tecken och precis den sortens ändring som förblir trasig eftersom ingen kommer på tanken att titta. Det som byggdes runt den väger tyngre: tre steg av validering vid varje konvergenskörning. Kandidatfilen syntaxkontrolleras innan den installeras, så att en ogiltig konfiguration aldrig når värden. Den sammansatta konfigurationen kontrolleras efter installationen. Sedan läses daemonens egen utdata med de gällande värdena tillbaka och 24 direktiv kontrolleras mot den, så att en inställning som har skrivits men åsidosatts får körningen att misslyckas. Två direktiv utelämnades medvetet, båda eftersom daemonen inte längre implementerar dem och att skriva dem bara skulle se grundligt ut.
Resultat. Säkerhetsläget för SSH är nu daemonens svar snarare än repots påstående, och skillnaden är inte teoretisk — den var redan två inställningar bred när kontrollen skrevs. En konvergenskörning som inte kan se om en säkerhetsåtgärd fick effekt har inte verifierat den, och att greppa efter ett direktiv bevisar bara att det skrevs.
Se tillbaka på Hittade och åtgärdade tre skydd mot brute force‑attacker över SSH som aldrig hade fungerat: en jail som bevakade port 22 medan daemonen lyssnade på 1986, en hastighetsbegränsning som skuggades av en bredare regel ovanför den och en spärråtgärd vars binärfil aldrig gick att hitta, så att ingen spärr någonsin hade tillämpats. Läs vidare: Bevisade spärrkedjan mot intrång från början till slut vid varje härdningskörning genom att spärra en reserverad testadress, läsa den kärnregel som uppstod och häva spärren i ett städblock som alltid körs, så att en jail som slutar fungera fäller körningen i stället för att rapportera att allt är i ordning. Eller ta en titt på hela portföljen.
En del av en längre historik — och den finns i sin helhet här.
Varje post är skriven på samma sätt: situationen, uppgiften, vad vi gjorde och vad som förändrades.