Arkiv för 'Linux Security' kategorin

Bryta sig ur en sudo Shell

18 aug 2009

Jag har tänkt att skriva upp detta på ett tag, men hade ett inlägg gå på en av de SecurityFocus e-postlistor som motiverade mig att få det gjort. Posten frågade, "Hur kan du begränsa sudo så att användare inte kan radera hela hårddisken?". Det korta svaret är, det är oerhört svårt.

Sudo är ett säkerhetsverktyg som används inom UNIX och Linux världen. Det tillåter administratören att begränsa tillgången till hög nivå kommandon. Den skiljer sig från de su kommandot i det su omedelbart ger användaren tillgång rotnivå. Sudo tillåter administratören att finjustera som roten kommandon faktiskt kan nås. Dessutom skapar sudo en verifieringskedja för samtliga utförda kommandon.

Problemet med sudo är att den har ingen synlighet när ett verktyg tillåter ett kommando skal vara lekt. Detta innebär att en användare kan missköter sig på systemet samtidigt som de skapar en verifieringskedja, vilket gör det verkar de har gjort något fel.

Testa själv

Jag ska gå igenom ett exempel så att du kan uppleva exakt vad jag menar. Du behöver en Linux-system för detta. Om du inte har en händig, Backtrack borde fungera alldeles utmärkt. Testsystemet jag använder är baserad på Fedora , men de är ganska lika.

Steg 1: Lägg till dig själv i gruppen Användare

Använd din favorit texteditor för att redigera filen / etc / group-fil. Leta efter "användare" grupp och lägga till ditt kontonamn. I detta exempel har jag lagt kontonamnet "cbrenton".

användare: x: 100: cbrenton

Steg 2: Skapa en sudousers post

Nästa vi behöver redigera / etc / sudoers fil för att definiera vad användarna gruppen är tillåtet att göra. Vi behöver använda visudo för detta, vilket är en texteditor baserad på editorn vi . Om du är bekväm med VI, skriv in kommandot "visudo" och lägga denna rad till slutet av filen:

% Användare ALLA = / usr / bin / mindre

Om du inte vet vi, jag ska ge dig det exakta kommandon. Kom ihåg att allt är skiftlägeskänsligt:

visudo

G

o <- Bokstaven O

% Användare ALLA = / usr / bin / mindre

<Esc> <Esc>

: Wq

Steg 3: Övervaka sudo aktivitet

Öppna ett andra terminalfönster och använda "su -" att ta root-privilegier. Skriv in kommandot:

tail-f / var / log / säkra

Detta kommer att tillåta oss att övervaka alla sudo aktivitet.

Steg 4: Kör en sudo kommando

Tillbaka i den första terminalfönstret skriv in kommandot:

sudo mindre / etc / hosts

Du blir ombedd att ange ditt lösenord (ditt lösenord, inte root lösenord). När du skriver in ditt lösenord bör du se innehållet i / etc / hosts. I det andra terminalfönstret Du bör nu ha en loggpost som liknar följande:

18 aug 16:07:58 Fubar sudo: cbrenton: TTY = pts / 4; PWD = / home / cbrenton, user = root; COMMAND = / usr / bin / mindre / etc / hosts

Så vi kan se datum / tid, som körs kommandot, vilken terminal de var, vad katalog de var, vilken behörighet nivå de använder och vad kommandot de körs inklusive eventuella kommandoradsväxlar (i detta fall en filspecifikation) . Så långt är allt bra.

Steg 5: Bust ett skal

I den första terminalfönstret (som kör mindre kommando) skriver:

! <Retur>

Du bör nu vara att titta på en rot kommandotolk. För att verifiera att du är i själva verket roten, skriv in kommandot:

whoami

Observera att skriva kommandot "whoami" inte genererar en post i säkerhetsloggen. Med andra ord, när vi lekte en kommandotolk med mindre kommandot, kan vi göra allt vi vill och sudo kommer inte logga den.

Steg 6: Ytterligare kontrollbesök

I den första terminalfönster där "mindre" är i bakgrunden, skriv in kommandot:

topp

Detta kommer att skriva ut statistik om system under drift.

I det andra terminalfönstret notera terminalen i bruk. I exemplet ovan loggposten terminalen är "TTY = pts / 4" utan din kan vara annorlunda. Anteckna terminalen. Nu, i denna andra fönster trycker du på:

<CTRL>-C

att döda svansen kommandot. Nu kör kommandot:

ps ax | grep "poäng / 4"

Byta "poäng / 4" med vad terminalen namnet du antecknade. Du bör få utdata som liknar följande:

17.330 poäng / 4 Ss 0:00 bash

18.392 poäng / 4 S 0:00 mindre / etc / hosts

18.410 poäng / 4 S 0:00 / bin / bash

18.432 poäng / 4 S + 0:00 topp

Detta säger oss att vi har två skal körs på terminalen. Den första är att titta på hosts-filen medan den andra körs upp kommandot. Så systemet gör faktiskt se att vi spelar runt i det andra skalet, kan det bara att sudo log inte.

Några andra rotnivån kommandon du kan prova som inte skadar något:

iptables-L

ifconfig

lsof-i

När du är övertygad om att du har full root-access, gå tillbaka och kolla loggen för att verifiera att sudo inte har loggat någonting:

tail / var / log / säkra

När du är klar med skal i första terminalfönstret, skriv in:

exit

q

Vad har vi lärt?

Vi har lärt oss att vi inte kan tillåta användare att ha full sudo tillgång till systemet och faktiskt upprätthålla en verifieringskedja för vad de gör. Tillgång skall begränsas till verktyg som inte stöder åberopa ett skal. Om vi ​​är osäkra, det är en enkel sak att kontrollera man-sidor. Prova detta:

man mindre

/

skal

Kommandot "man mindre" tar upp manualen för att använda "mindre"-kommandot. Genom att trycka på backslash nyckeln tar upp sökfunktionen. När vi skriver in ordet "skalet" och tryck på Enter, man hoppar till den första förekomsten av strängen "skal" och lyfter fram varje enskilt fall. Observera avsnittet mannen hoppade till beskriver hur mindre kan åberopa ett skal. Nu vet vi att vi inte kan tillåta sudo tillgång till kommandot "mindre". Ett bättre alternativ kan vara kommandot "katt" som inte stödjer att åberopa ett skal.

En annan möjlighet är att helt enkelt använda ett annat verktyg. Till exempel verktyget op har utformats särskilt för att åtgärda några av de brister i säkerheten i sudo, inklusive möjligheten att styra shell access.

Exec Sammanfattning

Sudo är ett bra säkerhetsverktyg förutsatt att du använder det klokt. En av de vanligaste misstagen med sudo är att använda den för att tillåta åtkomst till alla verktyg rotnivå. Sudo kan generera en effektiv verifieringskedja, men bara om det är begränsat till verktyg som inte har skal förmåga.