SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Mobil 
Uygulama 
Güvenlik 
Testlerinde 
Sertifika 
Sabitlemeyi 
Devre 
Dışı 
Bırakma 
[Certificate Pinning Bypass] 
Candan BOLUKBAS <candan.bolukbas@bga.com.tr> 
[Pentestlerinde çokça kullanılan SSL sonlandırma kapasitesine sahip proxy uygulamaları SSL trafiğini 
sonlandırsa dahi, kullanıcı tarfındaki uygulama kendi içerisindeki Pinned Certifcate haricinde bir sertifika 
ile karşılaşınca iletişimi sonlandırır. Bu durum testleri oldukça zorlaştırır, çözüm ise Man-­‐in-­‐The-­‐Middle 
(MiTM) yerine Man-­‐in-­‐The-­‐Front (MiTF) yöntemidir.]
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
İçerik Tablosu 
Android 
........................................................................................................................................................ 
2 
Android 
SSL 
Trust 
Bypass 
......................................................................................................................... 
7 
1 
Android-­‐SSL-­‐TrustKiller 
........................................................................................................................ 
9 
iOS 
.............................................................................................................................................................. 
11 
iOS 
SSL 
Kill 
Switch 
.................................................................................................................................. 
14 
Referanslar 
................................................................................................................................................. 
18
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
CertIficate Pinning Bypass 
(Sertifika Sabitlemeyi Devre Dışı Bırakma) 
Certificate 
Pinning 
yöntemi 
bir 
uygulamada 
bir 
sertifika 
otoritesine 
(CA) 
güvenmeyi 
veya 
bir 
DNS 
adına 
bağımlı 
olmayı 
çözen, 
aynı 
zamanda 
PKI 
ortamında 
anahtar 
değişimi 
ihtiyacının 
ortadan 
kaldıran 
oldukça 
güvenli 
bir 
yöntemdir. 
Temel 
olarak 
çalışma 
mantığında 
kullanıcı 
tarafı 
ile 
sunucu 
arasında 
önceden 
belirlenmiş 
bir 
Public-­‐Private 
anahtar 
ikilisinin 
Public 
anahtarının 
kullanıcı 
tarafı 
uygulamasının 
içine 
hard-­‐coded 
veya 
dosya 
tabanlı 
olarak 
gömülmesi 
vardır. 
Certificate 
Pinning'e 
alternatif 
yöntemlerden 
bazıları: 
Ephemeral 
Keys, 
Pinning 
Gaps, 
Revocation 
ve 
X509 
Validation. 
Zaafiyet 
testlerinde 
çokça 
kullanılan 
SSL 
sonlandırma 
kapasitesine 
sahip 
proxy 
uygulamaları 
(Fiddler, 
BurpSuite, 
Zap 
vs.) 
SSL 
trafiğini 
sonlandırsa 
dahi, 
kullanıcı 
tarfındaki 
uygulama 
kendi 
içerisindeki 
(Pinned 
Certifcate) 
haricinde 
bir 
sertifika 
ile 
karşılaşınca 
iletişimi 
sonlandırır. 
Bu 
durum 
testleri 
oldukça 
zorlaştırır. 
Bu 
duruma 
çözüm 
ise 
Man-­‐in-­‐The-­‐Middle 
(MiTM) 
yerine 
Man-­‐in-­‐The-­‐Front 
(MiTF) 
yöntemidir. 
Man-­‐in-­‐The-­‐Front 
(önde 
duran 
adam) 
yöntemi 
iletişimin 
başlangıcında 
durmaktır. 
Bu 
yöntem 
kağıt 
kıyma 
makinasından 
ilham 
alınarak 
ortaya 
çıkarılmıştır. 
Bazı 
kağıt 
kıyma 
makinaları 
kağıtları 
kıymadan 
önce 
kıyma 
bıçaklarından 
önünde 
bulunan 
tarayıcı 
ile 
kırpılacak 
kağıdı 
tarayıp, 
bir 
sunucuya 
yüklüyor. 
Aynı 
şekilde 
MiTF 
yöntemiyle 
kullanıcı 
tarafındaki 
uygulama 
gelen 
sertifikanın 
doğruluğunu 
kontrol 
ederken 
işletim 
sistemi 
fonksiyonlarını 
çağırırken, 
biz 
tam 
bu 
noktada 
yapılan 
bu 
kontrolü 
manipüle 
edip 
gelen 
tüm 
sertifkalara 
güvenmesini 
sağlıyoruz. 
Android 
Android 
işletim 
sistemlerinde 
Certifikate 
Pinning 
uygulaması 
için 
aşağıdaki 
kütüphaneler 
kullanılır 
2 
• javax.net.ssl 
• org.apache.http 
javax.net.ssl 
kütüphanesi 
uygulama 
spesifik 
X509TrustManager 
oluşturulmasını 
sağlar. 
Eğer 
bir 
uygulama 
işletim 
sisteminin 
sertifika 
otorilelerine 
(CA) 
güvenmek 
istemezse, 
bu 
kütüphane 
ile 
HttpsURLConnection 
oluştururken 
kendi 
SSLSocketFactory'sini 
oluşturur 
ve 
böylece 
kendi 
X509TrustManager'ını 
uygulamış 
olur. 
Aşağıda 
örnek 
bir 
kod 
bloğu 
gösterilmiştir: 
// Load CAs from an InputStream 
// (could be from a resource or ByteArrayInputStream or ...)
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
// From the file that already in local file system namely load-der.crt 
InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt")); // 
[1] 
Certificate ca; 
try { 
3 
ca = cf.generateCertificate(caInput); 
System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); 
} finally { 
caInput.close(); 
} 
// Create a KeyStore containing our trusted CAs 
String keyStoreType = KeyStore.getDefaultType(); 
KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
keyStore.load(null, null); 
keyStore.setCertificateEntry("ca", ca); // [2] 
// Create a TrustManager that trusts the CAs in our KeyStore 
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
tmf.init(keyStore); 
// Create an SSLContext that uses our TrustManager 
SSLContext context = SSLContext.getInstance("TLS"); 
context.init(null, tmf.getTrustManagers(), null); // [3] 
// Tell the URLConnection to use a SocketFactory from our SSLContext 
URL url = new URL("https://certs.cac.washington.edu/CAtest/"); 
HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection(); // [4] 
urlConnection.setSSLSocketFactory(context.getSocketFactory()); // [5] 
InputStream in = urlConnection.getInputStream(); 
copyInputStreamToOutputStream(in, System.out); 
Bu 
kod 
bloğunda 
kısaca: 
[1] yazan 
kısımda 
uygulama 
içerisine 
gömülü 
olan 
sertifika 
CA 
olarak 
yükleniyor. 
[2] yazana 
kısımda 
bu 
CA 
kullanılarak 
KeyStore 
objesi 
tanımlanıyor 
[3] yazan 
kısımda 
SSLContext'i 
X509TrustManager 
objesi 
kullanılarak 
tanımlanıyor 
[4] ve 
[5] 
numaralı 
kısımlarda 
oluşturulan 
SSLContext'i 
kullanılarak 
soket 
açılıyor.
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
https://developer.android.com/reference/java/net/HttpURLConnection.html 
Bu 
şekilde 
bir 
uygulama 
oldukça 
güvenli 
duruyor 
ancak 
eğer 
biz 
4 
[5]'teki 
SSLContext'in 
getSocketFactory() 
fonksiyonundan 
dönecek 
SSLSocketFactory 
objesinin 
aşağıdaki 
şekilde 
güvenlik 
kontrollerini 
yeniden 
yazarsak, 
soket 
güvenli 
olmayan 
bir 
sertifika 
ile 
de 
açılabilir. 
https://android.googlesource.com/platform/external/apache-­‐ 
http/+/2f0e9505248dc19d7fcfed4c1efd7c3daf863f03/src/org/apache/http/conn/ssl/SSLSocketFactory.j 
ava 
public class SSLSocketFactory implements LayeredSocketFactory { 
... 
private final SSLContext sslcontext; 
private final javax.net.ssl.SSLSocketFactory socketfactory; 
private final HostNameResolver nameResolver; 
private X509HostnameVerifier hostnameVerifier = BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; 
// burayı ALLOW_ALL_HOSTNAME_VERIFIER olarak modifiye ediyoruz 
... 
public Socket createSocket(final Socket socket, final String host,final int port,final 
boolean autoClose) throws IOException, UnknownHostException { 
SSLSocket sslSocket = (SSLSocket) 
this.socketfactory.createSocket(socket,host,port,autoClose); 
hostnameVerifier.verify(host, sslSocket); // bu noktayı modifiye edip tüm 
sertifikalar için verify() fonksiyonunun true dönmesini sağlıyoruz. 
return sslSocket; 
} 
public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) { 
if ( hostnameVerifier == null ) { 
throw new IllegalArgumentException("Hostname verifier may not be null"); 
} 
this.hostnameVerifier = hostnameVerifier; 
} 
public X509HostnameVerifier getHostnameVerifier() { 
return hostnameVerifier; 
} 
... 
public interface X509HostnameVerifier extends HostnameVerifier { 
boolean verify(String host, SSLSession session); 
void verify(String host, SSLSocket ssl) throws IOException;
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
5 
void verify(String host, X509Certificate cert) throws SSLException; 
/** 
* Checks to see if the supplied hostname matches any of the supplied CNs 
* or "DNS" Subject-Alts. Most implementations only look at the first CN, 
* and ignore any additional CNs. Most implementations do look at all of 
* the "DNS" Subject-Alts. The CNs or Subject-Alts may contain wildcards 
* according to RFC 2818. 
* @param cns CN fields, in order, as extracted from the X.509 
* certificate. 
* @param subjectAlts Subject-Alt fields of type 2 ("DNS"), as extracted 
* from the X.509 certificate. 
* @param host The hostname to verify. 
* @throws SSLException If verification failed. 
*/ 
void verify(String host, String[] cns, String[] subjectAlts) 
throws SSLException; 
} 
Sertifika 
kontrolü 
yapan 
bir 
diğer 
kütüphane 
de 
org.apache.http 
kütüphanesidir. 
Bu 
kütüphane 
de 
javax.net.ssl 
kütüphanesi 
gibi 
uygulama 
içerisine 
gömülen 
sertifikadan 
bir 
KeyStore 
objesi, 
bu 
objeden 
bir 
SSLContext ve 
bu 
context'ten 
bir 
SSLSocketFactory 
objesi 
oluşturur. 
Aynı 
şekilde 
SSLSocketFactory 
sınıfında 
aşağıda 
ki 
kontroller 
yapılır; 
https://android.googlesource.com/platform/external/apache-­‐ 
http/+/2f0e9505248dc19d7fcfed4c1efd7c3daf863f03/src/org/apache/http/conn/ssl/SSLSocketFactory.j 
ava 
/* Checks whether a socket connection is secure. 
* This factory creates TLS/SSL socket connections 
* which, by default, are considered secure. 
* Derived classes may override this method to perform 
* runtime checks, for example based on the cypher suite. 
* @param sock the connected socket 
* @return true 
* @throws IllegalArgumentException if the argument is invalid 
*/ 
public boolean isSecure(Socket sock)
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
6 
throws IllegalArgumentException { 
if (sock == null) { 
throw new IllegalArgumentException("Socket may not be null."); 
} 
// This instanceof check is in line with createSocket() above. 
if (!(sock instanceof SSLSocket)) { 
throw new IllegalArgumentException 
("Socket not created by this factory."); 
} 
// This check is performed last since it calls the argument object. 
if (sock.isClosed()) { 
throw new IllegalArgumentException("Socket is closed."); 
} 
return true; 
} // isSecure 
// non-javadoc, see interface LayeredSocketFactory 
public Socket createSocket( 
final Socket socket, 
final String host, 
final int port, 
final boolean autoClose 
) throws IOException, UnknownHostException { 
SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket( 
socket, 
host, 
port, 
autoClose 
); 
hostnameVerifier.verify(host, sslSocket); // bu noktayı modifiye edip tüm 
sertifikalar için verify() fonksiyonunun true dönmesini sağlıyoruz. 
return sslSocket; 
} 
public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) { 
if ( hostnameVerifier == null ) {
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
7 
throw new IllegalArgumentException("Hostname verifier may not be null"); 
} 
this.hostnameVerifier = hostnameVerifier; 
} 
public X509HostnameVerifier getHostnameVerifier() { 
return hostnameVerifier;// burada hostnameVerifier'ın değerini 
ALLOW_ALL_HOSTNAME_VERIFIER olarak modifiye ediyoruz 
} 
Bu 
şekilde 
çalışacak 
bir 
düzenleme 
Certificate 
Pinning'i 
bypass 
edecektir. 
Bunu 
gerçekleştirmenin 
birkaç 
yolu 
var; 
1. Custom 
VM/ROM: 
İlgili 
modifikasyonları 
yaptıktan 
sonra 
kendi 
Android 
işletim 
sistemimizi 
derleyebiliriz. 
Bu 
metod 
en 
iyi 
yol 
ancak 
Android'i 
derlemek 
pek 
kolay 
değil. 
Birkaç 
yüz 
GB 
disk 
alanınızı 
ve 
birkaç 
haftanızı 
harcamanız 
gerekebilir. 
2. Test 
yapmak 
istediğimiz 
uygulamayı 
Decompile 
edip, 
ilgili 
Patch'lemeyi 
yapıp, 
tekrar 
derleyip, 
imzalayıp, 
yeniden 
yükleyebiliriz. 
Bu 
yöntem 
de 
oldukça 
zor. 
Her 
uygulamayı 
başarıyla 
Decmpile/Recompile 
etmek 
pek 
kolay 
değil. 
3. JDWP 
debugger: 
Java 
Debug 
Wire 
Protocol 
(JDWP)'u 
kullanarak 
manipulasyon 
yapmak 
istediğimiz 
yere 
breakpoint 
atarak, 
ilgili 
yerde 
manipülasyon 
yapmak 
mümkün. 
Ancak 
pentester'lar 
için 
bu 
şekilde 
manuel 
bir 
metod 
pek 
uygun 
sayılmaz. 
4. Native 
code 
hooking 
(Mulliner) 
veya 
native 
code 
debugger 
(gdb, 
vtrace): 
Doğal 
kod 
kancalama 
yönteminde 
işletim 
sisteminin 
manipülasyon 
yapmak 
istediğimiz 
yere 
hook 
(kanca) 
atarak, 
tüm 
uygulamalardan 
gelen 
istekleri 
manipüle 
edebiliriz. 
iSEC 
Research 
Labs 
tarafından 
yazılan 
Android-­‐SSL-­‐TrustKiller 
uygulaması 
tam 
olarak 
bu 
işi 
yapıyor. 
Android SSL Trust Bypass 
Android-­‐SSL-­‐TrustKiller, 
Cydia 
Substrate 
üzerinde 
çalışan 
bir 
eklenti. 
Cydia 
Substrate 
iOS 
ve 
Android 
işletim 
sistemlerinde 
işletim 
sisteminin 
yeniden 
derlenmesine 
gerek 
kalmadan 
veya 
bir 
uygulamanın 
kaynak 
kodlarında 
modifikasyon 
yapmadan 
yazılan 
bir 
eklentinin 
hafızada 
bir 
uygulamaya 
bağlanmasını 
veya 
belirtilen 
izinlerle 
bir 
uygulamanın 
“class 
load” 
çağrılarına 
enjekte 
olabiliyor. 
Kısaca 
Cydia 
Substrate 
için 
API'si 
olan, 
oldukça 
güçlü 
bir 
çeşit 
mobil 
rootkit 
diyebiliriz. 
Detaylar: 
http://www.cydiasubstrate.com 
Android-­‐SSL-­‐TrustKiller, 
Cydia 
Substrate 
üzerinde 
çalışan 
bir 
eklenti 
ve 
yukarıda 
bahsettiğimiz 
şekilde 
aşağıdaki 
modifikasyonları 
yapıyor: 
// This hook overrides the getTrustManagers method 
// from javax.net.ssl.TrustManagerFactory 
// and returns a Trust Manager that doesn't perform checks 
MS.hookClassLoad("javax.net.ssl.TrustManagerFactory", 
new MS.ClassLoadHook() { 
...
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
// This hook overrides the setSSLSocketFactory method 
// from javax.net.ssl.HttpsURLConnection 
// and sets a SSL Socket Factory that uses a Trust Manager 
// that doesn't perform checks 
MS.hookClassLoad("javax.net.ssl.HttpsURLConnection", 
8 
new MS.ClassLoadHook() { 
... 
// This hook overrides the init method 
// from javax.net.ssl.SSLContext 
// and init the SSLContext with a Trust Manager that doesn't perform checks 
MS.hookClassLoad("javax.net.ssl.SSLContext", 
new MS.ClassLoadHook() { 
... 
// This hooks setHostnameVerifier 
// from org.apache.http.conn.ssl.SSLSocketFactory 
// and overrides the second parameter with 
// "SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER" 
// to accept any hostname 
MS.hookClassLoad("org.apache.http.conn.ssl.SSLSocketFactory", 
new MS.ClassLoadHook() { 
... 
// This hook forces the isSecure method 
// from org.apache.http.conn.ssl.SSLSocketFactory 
// to always return true 
MS.hookClassLoad("org.apache.http.conn.ssl.SSLSocketFactory", 
new MS.ClassLoadHook() { 
... 
// Overrides the setDefaultHostnameVerifier method 
// from org.apache.http.conn.ssl.SSLSocketFactory 
// to accept any hostname 
MS.hookClassLoad("javax.net.ssl.HttpsURLConnection", 
new MS.ClassLoadHook() { 
... 
https://github.com/iSECPartners/Android-­‐SSL-­‐TrustKiller
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
Android-­‐SSL-­‐TrustKiller 
Bu 
eklenti 
Cydia 
Susbtrate 
yardımı 
ile 
çeşitli 
sistem 
fonksiyonlarına 
kanca 
atarak, 
Certificate 
Pinning'i 
devre 
dışı 
bırakıp, 
tüm 
sertifikalar 
ile 
iletişim 
kurulmasını 
sağlar. 
Android-­‐SSL-­‐TrustKiller 
için: 
9 
1. Test 
yapılacak 
cihaz 
üzerinde 
root 
seviyesinde 
erişim 
izninin 
olması 
gerekiyor. 
2. Cydia 
Substrate 
uygulamasının 
kurulması 
gerekiyor. 
Ugulama 
Google 
Play 
Store'dan 
ücretsiz 
indirilebiliyor. 
https://play.google.com/store/apps/details?id=com.saurik.substrate&hl=en 
adresinden 
Cydia 
Substrate 
uygulamasını 
indirip 
kuruyoruz. 
3. Kendi 
Android-­‐SSL-­‐TrustKiller 
eklentimizi 
https://github.com/iSECPartners/Android-­‐SSL-­‐ 
TrustKiller 
adresinde 
indirip 
derleyebileceğimiz 
gibi, 
hazır 
derlenmiş 
APK 
dosyasını 
https://github.com/iSECPartners/Android-­‐SSL-­‐TrustKiller/releases 
adresinden 
indirebiliriz.
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
10 
4. Son 
olarak 
bu 
APK'yı 
kurduktan 
sonra 
işletim 
sistemini 
yeniden 
başlatınca 
artık 
cihazımız 
uygulamalar 
içerisinde 
Certificate 
Pinning 
olsa 
dahi 
her 
türlü 
sertifika 
ile 
SSL 
bağlantısı 
kuracaktır. 
Artık 
cihazın 
proxy 
ayarlarını 
ZAP, 
Burp 
veya 
Fiddler 
üzerinden 
geçirip 
sertifka 
kotrolünü 
devre 
dışı 
bıraktığını 
test 
edebiliriz. 
Tabi 
kullandığınız 
proxy 
uygulamasının 
CA 
sertifikasını 
cihazımızın 
“TrustStore”una 
eklenmesi 
gerekiyor. 
Twitter 
uygulaması 
Certificate 
Pinning 
kontrolü 
yapan 
bir 
uygulamadır 
ve 
Samsung 
Galaxy 
S3 
-­‐ 
Android 
4.1.1 
işletim 
sistemi 
ve 
ZAP 
ile 
yaptığımız 
test 
sonucunda 
aşağıdaki 
şekilde 
sertifika 
kontrolü 
devre 
dışı 
bırakılarak 
tüm 
trafik 
izlenebilmiştir. 
Örnek 
istek 
(Request): 
Gönderilen 
isteğin 
içini 
sertifika 
pinlemeyi 
devre 
dışı 
bırakarak 
görebiliyoruz. 
GET 
https://api.twitter.com/1.1/trends/timeline.json?woeid=1&timezone=GMT&lang=en&pc=true& 
include_media_features=true&include_cards=true&cards_platform=Android- 
10&include_descendent_reply_count=true HTTP/1.1 
X-Twitter-Client-Limit-Ad-Tracking: 0 
X-Twitter-API-Version: 5 
Accept-Language: en-US 
Authorization: OAuth realm="http://api.twitter.com/", oauth_version="1.0", 
oauth_token="2413629533-td18cunHkOBTzqVHhFrxxxxxxxxxxxxxxxxxxxx", 
oauth_nonce="8509887043348768201576888275811", oauth_timestamp="1411132012", 
oauth_signature="%2FcRiqq%2BaV2uHPBCsS9y1k0sQbuc%3D", 
oauth_consumer_key="3nVuSoBZnx6U4vzUxxxx", oauth_signature_method="HMAC-SHA1" 
X-Twitter-Client: TwitterAndroid 
X-Twitter-Client-AdID: b9269adc-9028-46ac-9223-d44842fxxxxx 
User-Agent: TwitterAndroid/5.26.0 (3030737-r-677) Samsung Galaxy S3 - 4.1.1 - API 16 - 
720x1280/4.1.1 (Genymotion;Samsung Galaxy S3 - 4.1.1 - API 16 - 
720x1280;generic;vbox86p;0;;1) 
X-Twitter-Client-DeviceID: 34fc178c0339d9ff 
X-Twitter-Client-Version: 5.26.0 
X-Client-UUID: e5a826d4-6028-4c6a-bc96-ec6f52bc3db1 
Connection: Keep-Alive
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
Host: api.twitter.com 
Gelen 
Cevap 
(Response): 
11 
Cevabın 
içini 
sertifika 
pinlemeyi 
devre 
dışı 
bırakarak 
görebiliyoruz. 
{"metadata":{"personalized":true,"location":{"name":"Worldwide","woeid":1}},"data":[{" 
metadata":{"type":"TRENDS"},"title":"#Aku0131llu0131EvimOns","name":"#Aku0131llu01 
31EvimOns","query":"%23Ak%C4%B1ll%C4%B1EvimOns","seed_hashtag":"#Aku0131llu0131EvimO 
ns","url":"http://twitter.com/search?q=%23Ak%C4%B1ll%C4%B1EvimOns","promoted_conten 
t":null,"events":null,"tweets":[{"created_at":"Fri Sep 19 11:38:06 +0000 
2014","id":512928617744310272,"id_str":"512928617744310272","text":"William Butlern 
#Aku0131llu0131EvimOns","source":"u003ca href="http://www.twitter.com" 
rel="nofollow"u003eTwitter for 
Windowsu003c/au003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_st 
atus_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_ 
to_screen_name":null,"user":{"id":515732038,"id_str":"515732038","name":"@FB 
Baru0131u015f 
","screen_name":"bar_nl","location":"","url":null,"description":"u015eampiyon 
FeNeRbAhu00c7e","protected":false,"followers_count":1071,"friends_count":2009... 
iOS 
iOS 
işletim 
sistemlerinde 
network 
istekleri 
için 
NSStream, 
CFStream, 
NSURLConnection 
API'leri 
kullanılır. 
iOS 
uygulama 
geliştiricilerinin 
çoğu 
URL 
isteklerini 
yapmak, 
sunucu 
sertifikalarını 
doğrulamak 
ve 
Certificate 
Pinning 
yapabilmek 
için 
NSURLConnection‘ı
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
override 
ederek 
kullanırlar. 
12 
NSURLConnection 
class 
referansı 
aşağıdaki 
şekilde 
tanımlanmıştır. 
@interface NSURLConnection : NSObject 
{ 
@private 
NSURLConnectionInternal *_internal; 
} 
/* Designated initializer */ 
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate 
startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0); 
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; 
Certificate 
Pinning 
yapmak 
için 
genellikle 
NSURLConnection 
sınıfının 
initWithRequest 
contructor'ı 
kullanılır. 
Yapılan 
request 
sonrasında 
gelen 
cevap 
parametre 
olarak 
verilen 
delegate 
objesine 
gönderilir. 
Bu 
delegate 
sınıfı 
NSURLConnectionDelegate 
tipinde 
ve 
aşağıdaki 
şekilde 
tanımlanmıştır; 
@interface NSURLConnection : NSObject 
{ 
@private 
NSURLConnectionInternal *_internal; 
} 
/* Designated initializer */ 
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate 
startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0); 
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; 
Certificate 
Pinning 
işleminde 
NSURLConnectionDelegate 
sınıfının 
willSendRequestForAuthenticationChallenge 
metodu 
veya 
canAuthenticateAgainstProtectionSpace, 
didReceiveAuthenticationChallenge 
ve 
didReceiveAuthenticationChallenge 
metodlarından 
oluşan 
bir 
sertifika 
doğrulama 
sistemi 
kulanılır. 
Bu 
fonksiyonlar 
SSL 
bağlantısı 
kurarken 
SSLContext 
oluşturulur 
ve 
serifika 
kontrolü 
bu 
kısımda 
olur. 
Bağlantı 
esnasında 
kullanılacak 
sertifika 
SSLSetCertificate 
metodu 
ile 
kotrol 
edilir. 
OSStatus SSLSetCertificate ( SSLContextRef context, CFArrayRef certRefs ); 
Certificate 
Pinning'i 
bypass 
etmek 
için 
SSLContext 
oluşturulurken 
SSLContextRef 
ve 
SSLSetCertificate 
metodunu 
manipule 
edip 
her 
türlü 
sertifka 
ile 
bağlantı 
kurmasını 
ve 
sertifika 
hatası 
olduğu 
durumda 
ortaya 
çıkan 
kSSLSessionOptionBreakOnServerAuth 
opsiyonunun 
hata 
oluşturmamasını 
sağlamak 
yeterli 
olacaktır. 
https://developer.apple.com/library/prerelease/mac/documentation/Security/Reference/secureTransportRef 
Android 
işletim 
sisteminde 
daha 
önce 
bahsettiğimiz 
Cydia 
Substrate'in 
iOS 
üzerinde 
çalışabilen 
versiyonu 
bulunmaktadır 
ve 
aynı 
şekilde 
işletim 
sistemi 
seviyesinde 
yapılan 
çağrıları 
ve
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
runtime'da 
class 
yüklemelerini 
modifiye 
edebilmektedir. 
Detyalar: 
http://www.cydiasubstrate.com 
Cydia 
Substrate 
üzerinde 
çalışan 
ve 
iSEC 
Partners 
tarafından 
geliştirilen 
iOS 
SSL 
Kill 
Switch 
eklentisi 
bahsettiğimiz 
bu 
modifikasyonları 
yapmamızı 
sağlar. 
Kaynak 
kodlarını 
incelediğimizde 
eklentinin 
13 
SSLContext 
oluşturulurken 
SSLContextRef 
ve 
SSLSetCertificate 
metodunu 
manipule 
edip 
her 
türlü 
sertifka 
ile 
bağlantı 
kurmasını 
ve 
sertifika 
hatası 
olduğu 
durumda 
ortaya 
çıkan 
kSSLSessionOptionBreakOnServerAuth 
opsiyonunun 
hata 
oluşturmamasını 
sağladığı 
görülmektedir. 
static OSStatus replaced_SSLHandshake( 
SSLContextRef context 
) { 
OSStatus result = original_SSLHandshake(context); 
// Hijack the flow when breaking on server authentication 
if (result == errSSLServerAuthCompleted) { 
// Do not check the cert and call SSLHandshake() again 
return original_SSLHandshake(context); 
} 
else 
return result; 
} 
... 
static SSLContextRef replaced_SSLCreateContext ( 
CFAllocatorRef alloc, 
SSLProtocolSide protocolSide, 
SSLConnectionType connectionType 
) { 
SSLContextRef sslContext = original_SSLCreateContext(alloc, protocolSide, 
connectionType); 
// Immediately set the kSSLSessionOptionBreakOnServerAuth option in order to 
disable cert validation 
original_SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, 
true); 
return sslContext; 
} 
... 
static OSStatus replaced_SSLSetSessionOption( 
SSLContextRef context, 
SSLSessionOption option, 
Boolean value) { 
// Remove the ability to modify the value of the 
kSSLSessionOptionBreakOnServerAuth option 
if (option == kSSLSessionOptionBreakOnServerAuth) 
return noErr; 
else 
return original_SSLSetSessionOption(context, option, value); 
} 
... 
MSHookFunction((void *) SSLHandshake,(void *) replaced_SSLHandshake, (void **) 
&original_SSLHandshake); 
MSHookFunction((void *) SSLSetSessionOption,(void *) replaced_SSLSetSessionOption, 
(void **) &original_SSLSetSessionOption); 
MSHookFunction((void *) SSLCreateContext,(void *) replaced_SSLCreateContext, (void 
**) &original_SSLCreateContext);
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
https://github.com/iSECPartners/ios-­‐ssl-­‐kill-­‐switch 
iOS SSL Kill Switch 
Bu 
eklenti 
/ 
tweak 
Cydia 
Susbtrate 
üzerinde 
çalışan 
ve 
çeşitli 
sistem 
fonksiyonlarına 
kanca 
atarak, 
Certificate 
Pinning'i 
devre 
dışı 
bırakıp, 
tüm 
sertifikalar 
ile 
iletişim 
kurulmasını 
sağlar. 
iOS 
SSL 
Kill 
Switch 
için: 
14 
1. Test 
yapılacak 
cihazın 
jailbreak 
yapılmış 
olması 
gerekiyor. 
Cydia 
Substrate 
sadece 
jailbreak'li 
cihazlarda 
çalışır. 
Bu 
yazının 
yazıldığı 
tarihte 
iOS 
8 
yeni 
çıktığı 
için 
henüz 
jailbreak 
edilebilir 
durumda 
değil 
ancak 
7.1.2 
ve 
öncesi 
versiyonlar 
için 
jailbreak 
mevcut. 
Nasıl 
jailbreak 
yapılabilieceği 
ile 
ilgili 
adımlar 
ve 
uygun 
yazılımlar 
http://jailbreak-­‐ 
me.info/ 
adresinden 
bulunabilir. 
2. Jailbreak 
yapılmış 
cihaz 
üzerine 
Cydia 
Store'dan 
aşağıdaki 
eklentiler 
yüklemelidir; 
a. PreferenceLoader 
b. Debian 
Packager 
c. Cydia 
Substrate
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
15 
3. Yapacağımız 
konsol 
işlemleri 
için 
Cydia 
Store'dan 
bir 
“Mobile 
Terminal” 
uygulaması 
yüklemek 
uygun 
olacaktır. 
Ama 
isterseniz 
cihaza 
SSH 
ile 
bağlanıp 
da 
aynı 
işlemleri 
yapabilirsiniz. 
4. Bilgisayarınıza 
https://github.com/iSECPartners/ios-­‐ssl-­‐kill-­‐switch/releases 
adresinden 
iOS 
SSL 
Kill 
Switch 
deb 
paketini 
indrip 
iTools 
veya 
iFunBox 
gibi 
bir 
uygulama 
ile 
bu 
paketi 
test 
yapmak 
istediğimiz 
cihaza 
kopyalayoruz.
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
16 
5. Cihaza 
bağlandıktan 
sonra 
konsolda 
root 
erişimi 
alıp 
(jailbreal'li 
iOS 
cihazlarda 
default 
root 
şifresi 
“alpine”dir) 
aşağıdaki 
şekilde 
deb 
paketini 
kurup, 
SprinBoard'u 
yeniden 
başlatıyoruz; 
dpkg -i com.isecpartners.nabla.sslkillswitch_v0.6-iOS_7.0.deb 
killall -HUP SpringBoard
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
17 
6. iOS 
Cihaza 
test 
yapmak 
istediğimiz 
proxy 
uygulamasının 
(ZAP, 
Fiddler 
veya 
Burp) 
root 
sertifikasını 
yüklüyoruz. 
Bunu 
yapmanın 
birkaç 
yolu 
var, 
kullamak 
istediğiniz 
metodu 
size 
bırakıyorum. 
a. Mail 
atıp, 
iOS 
cihazın 
içinden 
bu 
sertifikayı 
kurabiliriz 
b. Bir 
web 
sunucusuna 
yükleyip 
safari 
üzerinden 
bu 
sertifikayı 
yükleyebiliriz 
c. iPhone 
Confşguration 
Utility 
kullanarak 
ilgili 
sertifikayı 
bir 
profil 
içerisine 
yükleyip 
sonra 
bu 
profili 
iOS 
cihaza 
yükleyebilirsiniz. 
Ben 
aşağıda 
görüldüğü 
şekilde 
bu 
metodu 
kullandım. 
7. iOS 
cihazın 
proxy 
ayarlarını 
test 
yapmak 
istediğimiz 
proxy 
uygulamasına 
yönlendirip 
HTTPS 
trafiğin 
Certificate 
Pinning 
kullanan 
uygulamalarda 
dahi 
sertifika 
uyarısı 
almadan 
decrypt 
edilebildiğini 
ağağıdaki 
şekilde 
görebilmekteyiz. 
Örnek 
İstek 
(Request): 
GET 
https://api.twitter.com/1.1/account/verify_credentials.json?application_id=com.apple.P 
references HTTP/1.1 
Authorization: OAuth oauth_nonce="7E3E57E0-16CA-4D40-B7DB-511XXXXXXXX", 
oauth_signature_method="HMAC-SHA1", oauth_timestamp="1411218235", 
oauth_consumer_key="WXZE9QillkIZpTANxxxxxx", oauth_token="2413629533- 
pNKcOWzwYGmWKhKzE1A7qz36Nmi1xxxxxxxxx", 
oauth_signature="NhD0X4C%2BDIaETSSnDYUXXXXXXXXX", oauth_version="1.0" 
Accept: */* 
Cookie: guest_id=v1%3A141121693454xxxxxxx 
Accept-Language: en-us 
Connection: keep-alive
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 
Proxy-Connection: keep-alive 
User-Agent: Settings/1.0 CFNetwork/672.1.15 Darwin/14.0.0 
Host: api.twitter.com 
Örnek 
Cevap 
(Response): 
"id":2413629533,"id_str":"2413629533","name":"Anonymous","screen_name":"xxxxxxxx","loc 
ation":"Earth","description":"","url":"http://t.co/LC0vThu4ID","entities":{"url":{" 
urls":[{"url":"http://t.co/LC0vThu4ID","expanded_url":"http://www.google.com","di 
splay_url":"google.com","indices":[0,22]}]},"description":{"urls":[]}},"protected":fal 
se,"followers_count":4,"friends_count":2,"listed_count":0,"created_at":"Sat Mar 15 
21:00:21 +0000 
2014","favourites_count":5,"utc_offset":null,"time_zone":null,"geo_enabled":false,"ver 
ified":false,"statuses_count":14,"lang":"en","status":{"created_at":"Wed Apr 02 
22:15:12 +0000 
2014","id":451483009699819521,"id_str":"451483009699819521","text":"Geru00e7ek para 
degil belki ama yinede kur deu011ferleri u00f6nemlinBitcoin = $ 437.33nLitecoin = 
$ 11.20nPeercoin = $ 1.77nMastercoin = $ 32.00","source":"u003ca 
href="http://twitter.com/download/iphone" rel="nofollow"u003eTwitter for 
iPhoneu003c/au003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_sta 
tus_id_str":null,... 
Not: 
Cihazınızda 
bu 
dökümanda 
gösterilen 
değişikleri 
yapmak 
çok 
büyük 
güvenlik 
zaafiyeti 
oluşturmaktadır. 
Lütfen 
testlerinizi 
test 
cihazları 
veya 
emülatörler 
üzerinde 
yapınız. 
Referanslar 
https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning 
https://www.owasp.org/images/f/f1/Pubkey-­‐pin-­‐supplement.pdf 
https://www.owasp.org/index.php/Pinning_Cheat_Sheet 
http://media.blackhat.com/bh-­‐us-­‐ 
12/Turbo/Diquet/BH_US_12_Diqut_Osborne_Mobile_Certificate_Pinning_Slides.pdf 
https://developer.android.com/training/articles/security-­‐ssl.html 
https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html 
https://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html 
https://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html 
https://android.googlesource.com/platform/external/apache-­‐ 
http/+/2f0e9505248dc19d7fcfed4c1efd7c3daf863f03/src/org/apache/http/conn/ssl/SSLSocketFactory.java 
https://github.com/iSECPartners/Android-­‐SSL-­‐TrustKiller 
http://www.cydiasubstrate.com/ 
http://www.cydiasubstrate.com/inject/android/ 
https://developer.apple.com/library/prerelease/mac/documentation/Security/Reference/secureTransportRef/ 
18

Mais conteúdo relacionado

Mais procurados

Zafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleriZafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleriEPICROUTERS
 
DNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm Önerileri
DNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm ÖnerileriDNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm Önerileri
DNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm ÖnerileriBGA Cyber Security
 
INTERNET VE YEREL AĞ SIZMA TESTLERİ
INTERNET VE YEREL AĞ SIZMA TESTLERİ INTERNET VE YEREL AĞ SIZMA TESTLERİ
INTERNET VE YEREL AĞ SIZMA TESTLERİ BGA Cyber Security
 
Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)
Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)
Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)PRISMA CSI
 
Saldırı Tipleri ve Log Yönetimi
Saldırı Tipleri ve Log YönetimiSaldırı Tipleri ve Log Yönetimi
Saldırı Tipleri ve Log YönetimiOğuzcan Pamuk
 
Nessus Kullanım Kitapçığı
Nessus Kullanım KitapçığıNessus Kullanım Kitapçığı
Nessus Kullanım KitapçığıBGA Cyber Security
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ BGA Cyber Security
 
Metasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim RehberiMetasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim RehberiFatih Ozavci
 
Yazılım Güvenliği Temelleri
Yazılım Güvenliği TemelleriYazılım Güvenliği Temelleri
Yazılım Güvenliği TemelleriBGA Cyber Security
 
Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Mehmet Ince
 
Siber Tehdit Avcılığı (Threat Hunting)
Siber Tehdit Avcılığı (Threat Hunting)Siber Tehdit Avcılığı (Threat Hunting)
Siber Tehdit Avcılığı (Threat Hunting)BGA Cyber Security
 
WEB ve MOBİL SIZMA TESTLERİ
WEB ve MOBİL SIZMA TESTLERİ WEB ve MOBİL SIZMA TESTLERİ
WEB ve MOBİL SIZMA TESTLERİ BGA Cyber Security
 
PORT TARAMA ve KEŞİF ÇALIŞMALARI
PORT TARAMA ve KEŞİF ÇALIŞMALARI PORT TARAMA ve KEŞİF ÇALIŞMALARI
PORT TARAMA ve KEŞİF ÇALIŞMALARI BGA Cyber Security
 

Mais procurados (20)

Zafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleriZafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleri
 
EXPLOIT POST EXPLOITATION
EXPLOIT POST EXPLOITATIONEXPLOIT POST EXPLOITATION
EXPLOIT POST EXPLOITATION
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2
 
DNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm Önerileri
DNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm ÖnerileriDNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm Önerileri
DNS Protokolüne Yönelik Güncel Saldırı Teknikleri & Çözüm Önerileri
 
Kesif ve Zafiyet Tarama
Kesif ve Zafiyet TaramaKesif ve Zafiyet Tarama
Kesif ve Zafiyet Tarama
 
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
 
INTERNET VE YEREL AĞ SIZMA TESTLERİ
INTERNET VE YEREL AĞ SIZMA TESTLERİ INTERNET VE YEREL AĞ SIZMA TESTLERİ
INTERNET VE YEREL AĞ SIZMA TESTLERİ
 
Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)
Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)
Beyaz Şapkalı Hacker CEH Eğitimi - Pasif Bilgi Toplama (OSINT)
 
Saldırı Tipleri ve Log Yönetimi
Saldırı Tipleri ve Log YönetimiSaldırı Tipleri ve Log Yönetimi
Saldırı Tipleri ve Log Yönetimi
 
Nessus Kullanım Kitapçığı
Nessus Kullanım KitapçığıNessus Kullanım Kitapçığı
Nessus Kullanım Kitapçığı
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
 
Metasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim RehberiMetasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
 
Yazılım Güvenliği Temelleri
Yazılım Güvenliği TemelleriYazılım Güvenliği Temelleri
Yazılım Güvenliği Temelleri
 
Metasploit El Kitabı
Metasploit El KitabıMetasploit El Kitabı
Metasploit El Kitabı
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
 
Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101
 
Siber Tehdit Avcılığı (Threat Hunting)
Siber Tehdit Avcılığı (Threat Hunting)Siber Tehdit Avcılığı (Threat Hunting)
Siber Tehdit Avcılığı (Threat Hunting)
 
WEB ve MOBİL SIZMA TESTLERİ
WEB ve MOBİL SIZMA TESTLERİ WEB ve MOBİL SIZMA TESTLERİ
WEB ve MOBİL SIZMA TESTLERİ
 
PORT TARAMA ve KEŞİF ÇALIŞMALARI
PORT TARAMA ve KEŞİF ÇALIŞMALARI PORT TARAMA ve KEŞİF ÇALIŞMALARI
PORT TARAMA ve KEŞİF ÇALIŞMALARI
 
Kablosuz Ağlarda Adli Analiz
Kablosuz Ağlarda Adli AnalizKablosuz Ağlarda Adli Analiz
Kablosuz Ağlarda Adli Analiz
 

Destaque

Güvenlik Testlerinde Bilgi Toplama
Güvenlik Testlerinde Bilgi ToplamaGüvenlik Testlerinde Bilgi Toplama
Güvenlik Testlerinde Bilgi ToplamaBGA Cyber Security
 
MICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARI
MICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARIMICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARI
MICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARIBGA Cyber Security
 
Oracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıOracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıBGA Cyber Security
 
Web ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama Kitabı
Web ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama KitabıWeb ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama Kitabı
Web ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama KitabıBGA Cyber Security
 
Sızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage KullanımıSızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage KullanımıBGA Cyber Security
 
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıWindows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıBGA Cyber Security
 
Web Servislerine Yönelik Sızma Testleri
Web Servislerine Yönelik Sızma TestleriWeb Servislerine Yönelik Sızma Testleri
Web Servislerine Yönelik Sızma TestleriBGA Cyber Security
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMABGA Cyber Security
 
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri KitabıDoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri KitabıBGA Cyber Security
 
Pentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik TestleriPentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik TestleriBGA Cyber Security
 
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1BGA Cyber Security
 
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİGÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİBGA Cyber Security
 
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBeyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBGA Cyber Security
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersBGA Cyber Security
 

Destaque (20)

Güvenlik Testlerinde Bilgi Toplama
Güvenlik Testlerinde Bilgi ToplamaGüvenlik Testlerinde Bilgi Toplama
Güvenlik Testlerinde Bilgi Toplama
 
MICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARI
MICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARIMICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARI
MICROSOFT SQL SERVER SIZMA VE GÜVENLİK TESTİ ÇALIŞMALARI
 
Oracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıOracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi Çalışmaları
 
Holynix v2
Holynix v2Holynix v2
Holynix v2
 
Holynix v1
Holynix v1Holynix v1
Holynix v1
 
Web ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama Kitabı
Web ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama KitabıWeb ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama Kitabı
Web ve Mobil Uygulama Güvenlik Testleri Eğitimi Uygulama Kitabı
 
Sızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage KullanımıSızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage Kullanımı
 
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıWindows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
 
Web Servislerine Yönelik Sızma Testleri
Web Servislerine Yönelik Sızma TestleriWeb Servislerine Yönelik Sızma Testleri
Web Servislerine Yönelik Sızma Testleri
 
VERİTABANI SIZMA TESTLERİ
VERİTABANI SIZMA TESTLERİVERİTABANI SIZMA TESTLERİ
VERİTABANI SIZMA TESTLERİ
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMA
 
PAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARIPAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARI
 
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri KitabıDoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
DoS DDoS Saldırıları ve Korunma Yöntemleri Kitabı
 
Pentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik TestleriPentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
 
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
 
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİGÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
 
Sızma Testleri Sonuç Raporu
Sızma Testleri Sonuç RaporuSızma Testleri Sonuç Raporu
Sızma Testleri Sonuç Raporu
 
DOS DDOS TESTLERİ
DOS DDOS TESTLERİ DOS DDOS TESTLERİ
DOS DDOS TESTLERİ
 
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBeyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack Routers
 

Semelhante a Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması

KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)
KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)
KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)Erol Dizdar
 
[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...
[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...
[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...OWASP Turkiye
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysisAttaporn Ninsuwan
 
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMISINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMIErtugrul Akbas
 
Writing Secure Code With .Net
Writing Secure Code With .NetWriting Secure Code With .Net
Writing Secure Code With .NetElif Bayrakdar
 
Web Application Firewall Tercih Rehberi
Web Application Firewall Tercih RehberiWeb Application Firewall Tercih Rehberi
Web Application Firewall Tercih RehberiBGA Cyber Security
 
Güvenli Yazılım Geliştirme.pptx
Güvenli Yazılım Geliştirme.pptxGüvenli Yazılım Geliştirme.pptx
Güvenli Yazılım Geliştirme.pptxanilyelken
 
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   sonAçık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma sonBGA Cyber Security
 
ISG Admin Guide TR.pdf
ISG Admin Guide TR.pdfISG Admin Guide TR.pdf
ISG Admin Guide TR.pdfMert339194
 
Oracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12cOracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12cOrhan ERIPEK
 
W3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIW3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIBGA Cyber Security
 
Vekil Sunucularve Guvenlik Duvarlari
Vekil Sunucularve Guvenlik DuvarlariVekil Sunucularve Guvenlik Duvarlari
Vekil Sunucularve Guvenlik Duvarlarieroglu
 
Web servisi güvenliği
Web servisi güvenliğiWeb servisi güvenliği
Web servisi güvenliğiEmrah Gürcan
 

Semelhante a Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması (20)

.Net ile yazılım güvenliği
.Net ile yazılım güvenliği.Net ile yazılım güvenliği
.Net ile yazılım güvenliği
 
KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)
KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)
KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS 7)
 
[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...
[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...
[OWASP-TR Uygulama Güvenliği Günü 2016] Emre Kısa - HTTP Güvenlik Başlıkları ...
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysis
 
Mail Sniper Nedir?
Mail Sniper Nedir?Mail Sniper Nedir?
Mail Sniper Nedir?
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMISINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Writing Secure Code With .Net
Writing Secure Code With .NetWriting Secure Code With .Net
Writing Secure Code With .Net
 
Web Application Firewall Tercih Rehberi
Web Application Firewall Tercih RehberiWeb Application Firewall Tercih Rehberi
Web Application Firewall Tercih Rehberi
 
Güvenli Yazılım Geliştirme.pptx
Güvenli Yazılım Geliştirme.pptxGüvenli Yazılım Geliştirme.pptx
Güvenli Yazılım Geliştirme.pptx
 
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   sonAçık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
 
ISG Admin Guide TR.pdf
ISG Admin Guide TR.pdfISG Admin Guide TR.pdf
ISG Admin Guide TR.pdf
 
Oracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12cOracle Enterprise Manager Cloud Control 12c
Oracle Enterprise Manager Cloud Control 12c
 
W3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIW3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – II
 
Vekil Sunucularve Guvenlik Duvarlari
Vekil Sunucularve Guvenlik DuvarlariVekil Sunucularve Guvenlik Duvarlari
Vekil Sunucularve Guvenlik Duvarlari
 
BTRisk Android Mobil Uygulama Denetimi Eğitimi
BTRisk Android Mobil Uygulama Denetimi EğitimiBTRisk Android Mobil Uygulama Denetimi Eğitimi
BTRisk Android Mobil Uygulama Denetimi Eğitimi
 
Asp.net ajax
Asp.net ajaxAsp.net ajax
Asp.net ajax
 
Web servisi güvenliği
Web servisi güvenliğiWeb servisi güvenliği
Web servisi güvenliği
 

Mais de BGA Cyber Security

WEBSOCKET Protokolünün Derinlemesine İncelenmesi
WEBSOCKET Protokolünün Derinlemesine İncelenmesiWEBSOCKET Protokolünün Derinlemesine İncelenmesi
WEBSOCKET Protokolünün Derinlemesine İncelenmesiBGA Cyber Security
 
Tatil Öncesi Güvenlik Kontrol Listesi.pdf
Tatil Öncesi Güvenlik Kontrol Listesi.pdfTatil Öncesi Güvenlik Kontrol Listesi.pdf
Tatil Öncesi Güvenlik Kontrol Listesi.pdfBGA Cyber Security
 
Ücretsiz Bilgi Güvenliği Farkındalık Eğitimi
Ücretsiz Bilgi Güvenliği Farkındalık EğitimiÜcretsiz Bilgi Güvenliği Farkındalık Eğitimi
Ücretsiz Bilgi Güvenliği Farkındalık EğitimiBGA Cyber Security
 
3. parti firma risklerinden nasıl korunulur?
3. parti firma risklerinden nasıl korunulur?3. parti firma risklerinden nasıl korunulur?
3. parti firma risklerinden nasıl korunulur?BGA Cyber Security
 
Bir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware Saldırıları
Bir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware SaldırılarıBir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware Saldırıları
Bir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware SaldırılarıBGA Cyber Security
 
Webinar: Popüler black marketler
Webinar: Popüler black marketlerWebinar: Popüler black marketler
Webinar: Popüler black marketlerBGA Cyber Security
 
Webinar: SOC Ekipleri için MITRE ATT&CK Kullanım Senaryoları
Webinar: SOC Ekipleri için MITRE ATT&CK Kullanım SenaryolarıWebinar: SOC Ekipleri için MITRE ATT&CK Kullanım Senaryoları
Webinar: SOC Ekipleri için MITRE ATT&CK Kullanım SenaryolarıBGA Cyber Security
 
Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020
Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020
Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020BGA Cyber Security
 
Webinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
Webinar: Siber Güvenlikte Olgunluk Seviyesini ArttırmakWebinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
Webinar: Siber Güvenlikte Olgunluk Seviyesini ArttırmakBGA Cyber Security
 
Open Source Soc Araçları Eğitimi 2020-II
Open Source Soc Araçları Eğitimi 2020-IIOpen Source Soc Araçları Eğitimi 2020-II
Open Source Soc Araçları Eğitimi 2020-IIBGA Cyber Security
 
Webinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner Güvenliği
Webinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner GüvenliğiWebinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner Güvenliği
Webinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner GüvenliğiBGA Cyber Security
 
Hacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem AnaliziHacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem AnaliziBGA Cyber Security
 
RAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİ
RAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİRAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİ
RAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİBGA Cyber Security
 
BGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing Raporu
BGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing RaporuBGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing Raporu
BGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing RaporuBGA Cyber Security
 
SOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu Çözümler
SOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu ÇözümlerSOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu Çözümler
SOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu ÇözümlerBGA Cyber Security
 
Veri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of Secrets
Veri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of SecretsVeri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of Secrets
Veri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of SecretsBGA Cyber Security
 
Aktif Dizin (Active Directory) Güvenlik Testleri - I: Bilgi Toplama
Aktif Dizin (Active Directory) Güvenlik Testleri - I:  Bilgi ToplamaAktif Dizin (Active Directory) Güvenlik Testleri - I:  Bilgi Toplama
Aktif Dizin (Active Directory) Güvenlik Testleri - I: Bilgi ToplamaBGA Cyber Security
 
SSL Sertifikalarından Phishing Domain Tespiti
SSL Sertifikalarından Phishing Domain TespitiSSL Sertifikalarından Phishing Domain Tespiti
SSL Sertifikalarından Phishing Domain TespitiBGA Cyber Security
 

Mais de BGA Cyber Security (20)

WEBSOCKET Protokolünün Derinlemesine İncelenmesi
WEBSOCKET Protokolünün Derinlemesine İncelenmesiWEBSOCKET Protokolünün Derinlemesine İncelenmesi
WEBSOCKET Protokolünün Derinlemesine İncelenmesi
 
Tatil Öncesi Güvenlik Kontrol Listesi.pdf
Tatil Öncesi Güvenlik Kontrol Listesi.pdfTatil Öncesi Güvenlik Kontrol Listesi.pdf
Tatil Öncesi Güvenlik Kontrol Listesi.pdf
 
Ücretsiz Bilgi Güvenliği Farkındalık Eğitimi
Ücretsiz Bilgi Güvenliği Farkındalık EğitimiÜcretsiz Bilgi Güvenliği Farkındalık Eğitimi
Ücretsiz Bilgi Güvenliği Farkındalık Eğitimi
 
3. parti firma risklerinden nasıl korunulur?
3. parti firma risklerinden nasıl korunulur?3. parti firma risklerinden nasıl korunulur?
3. parti firma risklerinden nasıl korunulur?
 
Bir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware Saldırıları
Bir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware SaldırılarıBir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware Saldırıları
Bir Ransomware Saldırısının Anatomisi. A'dan Z'ye Ransomware Saldırıları
 
Webinar: Popüler black marketler
Webinar: Popüler black marketlerWebinar: Popüler black marketler
Webinar: Popüler black marketler
 
Webinar: SOC Ekipleri için MITRE ATT&CK Kullanım Senaryoları
Webinar: SOC Ekipleri için MITRE ATT&CK Kullanım SenaryolarıWebinar: SOC Ekipleri için MITRE ATT&CK Kullanım Senaryoları
Webinar: SOC Ekipleri için MITRE ATT&CK Kullanım Senaryoları
 
Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020
Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020
Açık Kaynak Kodlu Çözümler Kullanarak SOC Yönetimi SOAR & IRM Webinar - 2020
 
Webinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
Webinar: Siber Güvenlikte Olgunluk Seviyesini ArttırmakWebinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
Webinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
 
Open Source Soc Araçları Eğitimi 2020-II
Open Source Soc Araçları Eğitimi 2020-IIOpen Source Soc Araçları Eğitimi 2020-II
Open Source Soc Araçları Eğitimi 2020-II
 
Webinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner Güvenliği
Webinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner GüvenliğiWebinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner Güvenliği
Webinar Sunumu: Saldırı, Savunma ve Loglama Açısından Konteyner Güvenliği
 
Hacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem AnaliziHacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem Analizi
 
Open Source SOC Kurulumu
Open Source SOC KurulumuOpen Source SOC Kurulumu
Open Source SOC Kurulumu
 
RAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİ
RAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİRAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİ
RAKAMLARIN DİLİ İLE 2020 YILI SIZMA TESTLERİ
 
Siber Fidye 2020 Raporu
Siber Fidye 2020 RaporuSiber Fidye 2020 Raporu
Siber Fidye 2020 Raporu
 
BGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing Raporu
BGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing RaporuBGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing Raporu
BGA Türkiye Bankacılık Sektörü 1. Çeyrek Phishing Raporu
 
SOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu Çözümler
SOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu ÇözümlerSOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu Çözümler
SOC Kurulumu ve Yönetimi İçin Açık Kaynak Kodlu Çözümler
 
Veri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of Secrets
Veri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of SecretsVeri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of Secrets
Veri Sızıntıları İçinden Bilgi Toplama: Distributed Denial of Secrets
 
Aktif Dizin (Active Directory) Güvenlik Testleri - I: Bilgi Toplama
Aktif Dizin (Active Directory) Güvenlik Testleri - I:  Bilgi ToplamaAktif Dizin (Active Directory) Güvenlik Testleri - I:  Bilgi Toplama
Aktif Dizin (Active Directory) Güvenlik Testleri - I: Bilgi Toplama
 
SSL Sertifikalarından Phishing Domain Tespiti
SSL Sertifikalarından Phishing Domain TespitiSSL Sertifikalarından Phishing Domain Tespiti
SSL Sertifikalarından Phishing Domain Tespiti
 

Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması

  • 1. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma [Certificate Pinning Bypass] Candan BOLUKBAS <candan.bolukbas@bga.com.tr> [Pentestlerinde çokça kullanılan SSL sonlandırma kapasitesine sahip proxy uygulamaları SSL trafiğini sonlandırsa dahi, kullanıcı tarfındaki uygulama kendi içerisindeki Pinned Certifcate haricinde bir sertifika ile karşılaşınca iletişimi sonlandırır. Bu durum testleri oldukça zorlaştırır, çözüm ise Man-­‐in-­‐The-­‐Middle (MiTM) yerine Man-­‐in-­‐The-­‐Front (MiTF) yöntemidir.]
  • 2. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma İçerik Tablosu Android ........................................................................................................................................................ 2 Android SSL Trust Bypass ......................................................................................................................... 7 1 Android-­‐SSL-­‐TrustKiller ........................................................................................................................ 9 iOS .............................................................................................................................................................. 11 iOS SSL Kill Switch .................................................................................................................................. 14 Referanslar ................................................................................................................................................. 18
  • 3. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma CertIficate Pinning Bypass (Sertifika Sabitlemeyi Devre Dışı Bırakma) Certificate Pinning yöntemi bir uygulamada bir sertifika otoritesine (CA) güvenmeyi veya bir DNS adına bağımlı olmayı çözen, aynı zamanda PKI ortamında anahtar değişimi ihtiyacının ortadan kaldıran oldukça güvenli bir yöntemdir. Temel olarak çalışma mantığında kullanıcı tarafı ile sunucu arasında önceden belirlenmiş bir Public-­‐Private anahtar ikilisinin Public anahtarının kullanıcı tarafı uygulamasının içine hard-­‐coded veya dosya tabanlı olarak gömülmesi vardır. Certificate Pinning'e alternatif yöntemlerden bazıları: Ephemeral Keys, Pinning Gaps, Revocation ve X509 Validation. Zaafiyet testlerinde çokça kullanılan SSL sonlandırma kapasitesine sahip proxy uygulamaları (Fiddler, BurpSuite, Zap vs.) SSL trafiğini sonlandırsa dahi, kullanıcı tarfındaki uygulama kendi içerisindeki (Pinned Certifcate) haricinde bir sertifika ile karşılaşınca iletişimi sonlandırır. Bu durum testleri oldukça zorlaştırır. Bu duruma çözüm ise Man-­‐in-­‐The-­‐Middle (MiTM) yerine Man-­‐in-­‐The-­‐Front (MiTF) yöntemidir. Man-­‐in-­‐The-­‐Front (önde duran adam) yöntemi iletişimin başlangıcında durmaktır. Bu yöntem kağıt kıyma makinasından ilham alınarak ortaya çıkarılmıştır. Bazı kağıt kıyma makinaları kağıtları kıymadan önce kıyma bıçaklarından önünde bulunan tarayıcı ile kırpılacak kağıdı tarayıp, bir sunucuya yüklüyor. Aynı şekilde MiTF yöntemiyle kullanıcı tarafındaki uygulama gelen sertifikanın doğruluğunu kontrol ederken işletim sistemi fonksiyonlarını çağırırken, biz tam bu noktada yapılan bu kontrolü manipüle edip gelen tüm sertifkalara güvenmesini sağlıyoruz. Android Android işletim sistemlerinde Certifikate Pinning uygulaması için aşağıdaki kütüphaneler kullanılır 2 • javax.net.ssl • org.apache.http javax.net.ssl kütüphanesi uygulama spesifik X509TrustManager oluşturulmasını sağlar. Eğer bir uygulama işletim sisteminin sertifika otorilelerine (CA) güvenmek istemezse, bu kütüphane ile HttpsURLConnection oluştururken kendi SSLSocketFactory'sini oluşturur ve böylece kendi X509TrustManager'ını uygulamış olur. Aşağıda örnek bir kod bloğu gösterilmiştir: // Load CAs from an InputStream // (could be from a resource or ByteArrayInputStream or ...)
  • 4. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma CertificateFactory cf = CertificateFactory.getInstance("X.509"); // From the file that already in local file system namely load-der.crt InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt")); // [1] Certificate ca; try { 3 ca = cf.generateCertificate(caInput); System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); } finally { caInput.close(); } // Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); // [2] // Create a TrustManager that trusts the CAs in our KeyStore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); // Create an SSLContext that uses our TrustManager SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); // [3] // Tell the URLConnection to use a SocketFactory from our SSLContext URL url = new URL("https://certs.cac.washington.edu/CAtest/"); HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection(); // [4] urlConnection.setSSLSocketFactory(context.getSocketFactory()); // [5] InputStream in = urlConnection.getInputStream(); copyInputStreamToOutputStream(in, System.out); Bu kod bloğunda kısaca: [1] yazan kısımda uygulama içerisine gömülü olan sertifika CA olarak yükleniyor. [2] yazana kısımda bu CA kullanılarak KeyStore objesi tanımlanıyor [3] yazan kısımda SSLContext'i X509TrustManager objesi kullanılarak tanımlanıyor [4] ve [5] numaralı kısımlarda oluşturulan SSLContext'i kullanılarak soket açılıyor.
  • 5. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma https://developer.android.com/reference/java/net/HttpURLConnection.html Bu şekilde bir uygulama oldukça güvenli duruyor ancak eğer biz 4 [5]'teki SSLContext'in getSocketFactory() fonksiyonundan dönecek SSLSocketFactory objesinin aşağıdaki şekilde güvenlik kontrollerini yeniden yazarsak, soket güvenli olmayan bir sertifika ile de açılabilir. https://android.googlesource.com/platform/external/apache-­‐ http/+/2f0e9505248dc19d7fcfed4c1efd7c3daf863f03/src/org/apache/http/conn/ssl/SSLSocketFactory.j ava public class SSLSocketFactory implements LayeredSocketFactory { ... private final SSLContext sslcontext; private final javax.net.ssl.SSLSocketFactory socketfactory; private final HostNameResolver nameResolver; private X509HostnameVerifier hostnameVerifier = BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; // burayı ALLOW_ALL_HOSTNAME_VERIFIER olarak modifiye ediyoruz ... public Socket createSocket(final Socket socket, final String host,final int port,final boolean autoClose) throws IOException, UnknownHostException { SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket(socket,host,port,autoClose); hostnameVerifier.verify(host, sslSocket); // bu noktayı modifiye edip tüm sertifikalar için verify() fonksiyonunun true dönmesini sağlıyoruz. return sslSocket; } public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) { if ( hostnameVerifier == null ) { throw new IllegalArgumentException("Hostname verifier may not be null"); } this.hostnameVerifier = hostnameVerifier; } public X509HostnameVerifier getHostnameVerifier() { return hostnameVerifier; } ... public interface X509HostnameVerifier extends HostnameVerifier { boolean verify(String host, SSLSession session); void verify(String host, SSLSocket ssl) throws IOException;
  • 6. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 5 void verify(String host, X509Certificate cert) throws SSLException; /** * Checks to see if the supplied hostname matches any of the supplied CNs * or "DNS" Subject-Alts. Most implementations only look at the first CN, * and ignore any additional CNs. Most implementations do look at all of * the "DNS" Subject-Alts. The CNs or Subject-Alts may contain wildcards * according to RFC 2818. * @param cns CN fields, in order, as extracted from the X.509 * certificate. * @param subjectAlts Subject-Alt fields of type 2 ("DNS"), as extracted * from the X.509 certificate. * @param host The hostname to verify. * @throws SSLException If verification failed. */ void verify(String host, String[] cns, String[] subjectAlts) throws SSLException; } Sertifika kontrolü yapan bir diğer kütüphane de org.apache.http kütüphanesidir. Bu kütüphane de javax.net.ssl kütüphanesi gibi uygulama içerisine gömülen sertifikadan bir KeyStore objesi, bu objeden bir SSLContext ve bu context'ten bir SSLSocketFactory objesi oluşturur. Aynı şekilde SSLSocketFactory sınıfında aşağıda ki kontroller yapılır; https://android.googlesource.com/platform/external/apache-­‐ http/+/2f0e9505248dc19d7fcfed4c1efd7c3daf863f03/src/org/apache/http/conn/ssl/SSLSocketFactory.j ava /* Checks whether a socket connection is secure. * This factory creates TLS/SSL socket connections * which, by default, are considered secure. * Derived classes may override this method to perform * runtime checks, for example based on the cypher suite. * @param sock the connected socket * @return true * @throws IllegalArgumentException if the argument is invalid */ public boolean isSecure(Socket sock)
  • 7. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 6 throws IllegalArgumentException { if (sock == null) { throw new IllegalArgumentException("Socket may not be null."); } // This instanceof check is in line with createSocket() above. if (!(sock instanceof SSLSocket)) { throw new IllegalArgumentException ("Socket not created by this factory."); } // This check is performed last since it calls the argument object. if (sock.isClosed()) { throw new IllegalArgumentException("Socket is closed."); } return true; } // isSecure // non-javadoc, see interface LayeredSocketFactory public Socket createSocket( final Socket socket, final String host, final int port, final boolean autoClose ) throws IOException, UnknownHostException { SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket( socket, host, port, autoClose ); hostnameVerifier.verify(host, sslSocket); // bu noktayı modifiye edip tüm sertifikalar için verify() fonksiyonunun true dönmesini sağlıyoruz. return sslSocket; } public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) { if ( hostnameVerifier == null ) {
  • 8. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 7 throw new IllegalArgumentException("Hostname verifier may not be null"); } this.hostnameVerifier = hostnameVerifier; } public X509HostnameVerifier getHostnameVerifier() { return hostnameVerifier;// burada hostnameVerifier'ın değerini ALLOW_ALL_HOSTNAME_VERIFIER olarak modifiye ediyoruz } Bu şekilde çalışacak bir düzenleme Certificate Pinning'i bypass edecektir. Bunu gerçekleştirmenin birkaç yolu var; 1. Custom VM/ROM: İlgili modifikasyonları yaptıktan sonra kendi Android işletim sistemimizi derleyebiliriz. Bu metod en iyi yol ancak Android'i derlemek pek kolay değil. Birkaç yüz GB disk alanınızı ve birkaç haftanızı harcamanız gerekebilir. 2. Test yapmak istediğimiz uygulamayı Decompile edip, ilgili Patch'lemeyi yapıp, tekrar derleyip, imzalayıp, yeniden yükleyebiliriz. Bu yöntem de oldukça zor. Her uygulamayı başarıyla Decmpile/Recompile etmek pek kolay değil. 3. JDWP debugger: Java Debug Wire Protocol (JDWP)'u kullanarak manipulasyon yapmak istediğimiz yere breakpoint atarak, ilgili yerde manipülasyon yapmak mümkün. Ancak pentester'lar için bu şekilde manuel bir metod pek uygun sayılmaz. 4. Native code hooking (Mulliner) veya native code debugger (gdb, vtrace): Doğal kod kancalama yönteminde işletim sisteminin manipülasyon yapmak istediğimiz yere hook (kanca) atarak, tüm uygulamalardan gelen istekleri manipüle edebiliriz. iSEC Research Labs tarafından yazılan Android-­‐SSL-­‐TrustKiller uygulaması tam olarak bu işi yapıyor. Android SSL Trust Bypass Android-­‐SSL-­‐TrustKiller, Cydia Substrate üzerinde çalışan bir eklenti. Cydia Substrate iOS ve Android işletim sistemlerinde işletim sisteminin yeniden derlenmesine gerek kalmadan veya bir uygulamanın kaynak kodlarında modifikasyon yapmadan yazılan bir eklentinin hafızada bir uygulamaya bağlanmasını veya belirtilen izinlerle bir uygulamanın “class load” çağrılarına enjekte olabiliyor. Kısaca Cydia Substrate için API'si olan, oldukça güçlü bir çeşit mobil rootkit diyebiliriz. Detaylar: http://www.cydiasubstrate.com Android-­‐SSL-­‐TrustKiller, Cydia Substrate üzerinde çalışan bir eklenti ve yukarıda bahsettiğimiz şekilde aşağıdaki modifikasyonları yapıyor: // This hook overrides the getTrustManagers method // from javax.net.ssl.TrustManagerFactory // and returns a Trust Manager that doesn't perform checks MS.hookClassLoad("javax.net.ssl.TrustManagerFactory", new MS.ClassLoadHook() { ...
  • 9. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma // This hook overrides the setSSLSocketFactory method // from javax.net.ssl.HttpsURLConnection // and sets a SSL Socket Factory that uses a Trust Manager // that doesn't perform checks MS.hookClassLoad("javax.net.ssl.HttpsURLConnection", 8 new MS.ClassLoadHook() { ... // This hook overrides the init method // from javax.net.ssl.SSLContext // and init the SSLContext with a Trust Manager that doesn't perform checks MS.hookClassLoad("javax.net.ssl.SSLContext", new MS.ClassLoadHook() { ... // This hooks setHostnameVerifier // from org.apache.http.conn.ssl.SSLSocketFactory // and overrides the second parameter with // "SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER" // to accept any hostname MS.hookClassLoad("org.apache.http.conn.ssl.SSLSocketFactory", new MS.ClassLoadHook() { ... // This hook forces the isSecure method // from org.apache.http.conn.ssl.SSLSocketFactory // to always return true MS.hookClassLoad("org.apache.http.conn.ssl.SSLSocketFactory", new MS.ClassLoadHook() { ... // Overrides the setDefaultHostnameVerifier method // from org.apache.http.conn.ssl.SSLSocketFactory // to accept any hostname MS.hookClassLoad("javax.net.ssl.HttpsURLConnection", new MS.ClassLoadHook() { ... https://github.com/iSECPartners/Android-­‐SSL-­‐TrustKiller
  • 10. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma Android-­‐SSL-­‐TrustKiller Bu eklenti Cydia Susbtrate yardımı ile çeşitli sistem fonksiyonlarına kanca atarak, Certificate Pinning'i devre dışı bırakıp, tüm sertifikalar ile iletişim kurulmasını sağlar. Android-­‐SSL-­‐TrustKiller için: 9 1. Test yapılacak cihaz üzerinde root seviyesinde erişim izninin olması gerekiyor. 2. Cydia Substrate uygulamasının kurulması gerekiyor. Ugulama Google Play Store'dan ücretsiz indirilebiliyor. https://play.google.com/store/apps/details?id=com.saurik.substrate&hl=en adresinden Cydia Substrate uygulamasını indirip kuruyoruz. 3. Kendi Android-­‐SSL-­‐TrustKiller eklentimizi https://github.com/iSECPartners/Android-­‐SSL-­‐ TrustKiller adresinde indirip derleyebileceğimiz gibi, hazır derlenmiş APK dosyasını https://github.com/iSECPartners/Android-­‐SSL-­‐TrustKiller/releases adresinden indirebiliriz.
  • 11. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 10 4. Son olarak bu APK'yı kurduktan sonra işletim sistemini yeniden başlatınca artık cihazımız uygulamalar içerisinde Certificate Pinning olsa dahi her türlü sertifika ile SSL bağlantısı kuracaktır. Artık cihazın proxy ayarlarını ZAP, Burp veya Fiddler üzerinden geçirip sertifka kotrolünü devre dışı bıraktığını test edebiliriz. Tabi kullandığınız proxy uygulamasının CA sertifikasını cihazımızın “TrustStore”una eklenmesi gerekiyor. Twitter uygulaması Certificate Pinning kontrolü yapan bir uygulamadır ve Samsung Galaxy S3 -­‐ Android 4.1.1 işletim sistemi ve ZAP ile yaptığımız test sonucunda aşağıdaki şekilde sertifika kontrolü devre dışı bırakılarak tüm trafik izlenebilmiştir. Örnek istek (Request): Gönderilen isteğin içini sertifika pinlemeyi devre dışı bırakarak görebiliyoruz. GET https://api.twitter.com/1.1/trends/timeline.json?woeid=1&timezone=GMT&lang=en&pc=true& include_media_features=true&include_cards=true&cards_platform=Android- 10&include_descendent_reply_count=true HTTP/1.1 X-Twitter-Client-Limit-Ad-Tracking: 0 X-Twitter-API-Version: 5 Accept-Language: en-US Authorization: OAuth realm="http://api.twitter.com/", oauth_version="1.0", oauth_token="2413629533-td18cunHkOBTzqVHhFrxxxxxxxxxxxxxxxxxxxx", oauth_nonce="8509887043348768201576888275811", oauth_timestamp="1411132012", oauth_signature="%2FcRiqq%2BaV2uHPBCsS9y1k0sQbuc%3D", oauth_consumer_key="3nVuSoBZnx6U4vzUxxxx", oauth_signature_method="HMAC-SHA1" X-Twitter-Client: TwitterAndroid X-Twitter-Client-AdID: b9269adc-9028-46ac-9223-d44842fxxxxx User-Agent: TwitterAndroid/5.26.0 (3030737-r-677) Samsung Galaxy S3 - 4.1.1 - API 16 - 720x1280/4.1.1 (Genymotion;Samsung Galaxy S3 - 4.1.1 - API 16 - 720x1280;generic;vbox86p;0;;1) X-Twitter-Client-DeviceID: 34fc178c0339d9ff X-Twitter-Client-Version: 5.26.0 X-Client-UUID: e5a826d4-6028-4c6a-bc96-ec6f52bc3db1 Connection: Keep-Alive
  • 12. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma Host: api.twitter.com Gelen Cevap (Response): 11 Cevabın içini sertifika pinlemeyi devre dışı bırakarak görebiliyoruz. {"metadata":{"personalized":true,"location":{"name":"Worldwide","woeid":1}},"data":[{" metadata":{"type":"TRENDS"},"title":"#Aku0131llu0131EvimOns","name":"#Aku0131llu01 31EvimOns","query":"%23Ak%C4%B1ll%C4%B1EvimOns","seed_hashtag":"#Aku0131llu0131EvimO ns","url":"http://twitter.com/search?q=%23Ak%C4%B1ll%C4%B1EvimOns","promoted_conten t":null,"events":null,"tweets":[{"created_at":"Fri Sep 19 11:38:06 +0000 2014","id":512928617744310272,"id_str":"512928617744310272","text":"William Butlern #Aku0131llu0131EvimOns","source":"u003ca href="http://www.twitter.com" rel="nofollow"u003eTwitter for Windowsu003c/au003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_st atus_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_ to_screen_name":null,"user":{"id":515732038,"id_str":"515732038","name":"@FB Baru0131u015f ","screen_name":"bar_nl","location":"","url":null,"description":"u015eampiyon FeNeRbAhu00c7e","protected":false,"followers_count":1071,"friends_count":2009... iOS iOS işletim sistemlerinde network istekleri için NSStream, CFStream, NSURLConnection API'leri kullanılır. iOS uygulama geliştiricilerinin çoğu URL isteklerini yapmak, sunucu sertifikalarını doğrulamak ve Certificate Pinning yapabilmek için NSURLConnection‘ı
  • 13. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma override ederek kullanırlar. 12 NSURLConnection class referansı aşağıdaki şekilde tanımlanmıştır. @interface NSURLConnection : NSObject { @private NSURLConnectionInternal *_internal; } /* Designated initializer */ - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0); - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; Certificate Pinning yapmak için genellikle NSURLConnection sınıfının initWithRequest contructor'ı kullanılır. Yapılan request sonrasında gelen cevap parametre olarak verilen delegate objesine gönderilir. Bu delegate sınıfı NSURLConnectionDelegate tipinde ve aşağıdaki şekilde tanımlanmıştır; @interface NSURLConnection : NSObject { @private NSURLConnectionInternal *_internal; } /* Designated initializer */ - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0); - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; Certificate Pinning işleminde NSURLConnectionDelegate sınıfının willSendRequestForAuthenticationChallenge metodu veya canAuthenticateAgainstProtectionSpace, didReceiveAuthenticationChallenge ve didReceiveAuthenticationChallenge metodlarından oluşan bir sertifika doğrulama sistemi kulanılır. Bu fonksiyonlar SSL bağlantısı kurarken SSLContext oluşturulur ve serifika kontrolü bu kısımda olur. Bağlantı esnasında kullanılacak sertifika SSLSetCertificate metodu ile kotrol edilir. OSStatus SSLSetCertificate ( SSLContextRef context, CFArrayRef certRefs ); Certificate Pinning'i bypass etmek için SSLContext oluşturulurken SSLContextRef ve SSLSetCertificate metodunu manipule edip her türlü sertifka ile bağlantı kurmasını ve sertifika hatası olduğu durumda ortaya çıkan kSSLSessionOptionBreakOnServerAuth opsiyonunun hata oluşturmamasını sağlamak yeterli olacaktır. https://developer.apple.com/library/prerelease/mac/documentation/Security/Reference/secureTransportRef Android işletim sisteminde daha önce bahsettiğimiz Cydia Substrate'in iOS üzerinde çalışabilen versiyonu bulunmaktadır ve aynı şekilde işletim sistemi seviyesinde yapılan çağrıları ve
  • 14. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma runtime'da class yüklemelerini modifiye edebilmektedir. Detyalar: http://www.cydiasubstrate.com Cydia Substrate üzerinde çalışan ve iSEC Partners tarafından geliştirilen iOS SSL Kill Switch eklentisi bahsettiğimiz bu modifikasyonları yapmamızı sağlar. Kaynak kodlarını incelediğimizde eklentinin 13 SSLContext oluşturulurken SSLContextRef ve SSLSetCertificate metodunu manipule edip her türlü sertifka ile bağlantı kurmasını ve sertifika hatası olduğu durumda ortaya çıkan kSSLSessionOptionBreakOnServerAuth opsiyonunun hata oluşturmamasını sağladığı görülmektedir. static OSStatus replaced_SSLHandshake( SSLContextRef context ) { OSStatus result = original_SSLHandshake(context); // Hijack the flow when breaking on server authentication if (result == errSSLServerAuthCompleted) { // Do not check the cert and call SSLHandshake() again return original_SSLHandshake(context); } else return result; } ... static SSLContextRef replaced_SSLCreateContext ( CFAllocatorRef alloc, SSLProtocolSide protocolSide, SSLConnectionType connectionType ) { SSLContextRef sslContext = original_SSLCreateContext(alloc, protocolSide, connectionType); // Immediately set the kSSLSessionOptionBreakOnServerAuth option in order to disable cert validation original_SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true); return sslContext; } ... static OSStatus replaced_SSLSetSessionOption( SSLContextRef context, SSLSessionOption option, Boolean value) { // Remove the ability to modify the value of the kSSLSessionOptionBreakOnServerAuth option if (option == kSSLSessionOptionBreakOnServerAuth) return noErr; else return original_SSLSetSessionOption(context, option, value); } ... MSHookFunction((void *) SSLHandshake,(void *) replaced_SSLHandshake, (void **) &original_SSLHandshake); MSHookFunction((void *) SSLSetSessionOption,(void *) replaced_SSLSetSessionOption, (void **) &original_SSLSetSessionOption); MSHookFunction((void *) SSLCreateContext,(void *) replaced_SSLCreateContext, (void **) &original_SSLCreateContext);
  • 15. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma https://github.com/iSECPartners/ios-­‐ssl-­‐kill-­‐switch iOS SSL Kill Switch Bu eklenti / tweak Cydia Susbtrate üzerinde çalışan ve çeşitli sistem fonksiyonlarına kanca atarak, Certificate Pinning'i devre dışı bırakıp, tüm sertifikalar ile iletişim kurulmasını sağlar. iOS SSL Kill Switch için: 14 1. Test yapılacak cihazın jailbreak yapılmış olması gerekiyor. Cydia Substrate sadece jailbreak'li cihazlarda çalışır. Bu yazının yazıldığı tarihte iOS 8 yeni çıktığı için henüz jailbreak edilebilir durumda değil ancak 7.1.2 ve öncesi versiyonlar için jailbreak mevcut. Nasıl jailbreak yapılabilieceği ile ilgili adımlar ve uygun yazılımlar http://jailbreak-­‐ me.info/ adresinden bulunabilir. 2. Jailbreak yapılmış cihaz üzerine Cydia Store'dan aşağıdaki eklentiler yüklemelidir; a. PreferenceLoader b. Debian Packager c. Cydia Substrate
  • 16. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 15 3. Yapacağımız konsol işlemleri için Cydia Store'dan bir “Mobile Terminal” uygulaması yüklemek uygun olacaktır. Ama isterseniz cihaza SSH ile bağlanıp da aynı işlemleri yapabilirsiniz. 4. Bilgisayarınıza https://github.com/iSECPartners/ios-­‐ssl-­‐kill-­‐switch/releases adresinden iOS SSL Kill Switch deb paketini indrip iTools veya iFunBox gibi bir uygulama ile bu paketi test yapmak istediğimiz cihaza kopyalayoruz.
  • 17. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 16 5. Cihaza bağlandıktan sonra konsolda root erişimi alıp (jailbreal'li iOS cihazlarda default root şifresi “alpine”dir) aşağıdaki şekilde deb paketini kurup, SprinBoard'u yeniden başlatıyoruz; dpkg -i com.isecpartners.nabla.sslkillswitch_v0.6-iOS_7.0.deb killall -HUP SpringBoard
  • 18. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma 17 6. iOS Cihaza test yapmak istediğimiz proxy uygulamasının (ZAP, Fiddler veya Burp) root sertifikasını yüklüyoruz. Bunu yapmanın birkaç yolu var, kullamak istediğiniz metodu size bırakıyorum. a. Mail atıp, iOS cihazın içinden bu sertifikayı kurabiliriz b. Bir web sunucusuna yükleyip safari üzerinden bu sertifikayı yükleyebiliriz c. iPhone Confşguration Utility kullanarak ilgili sertifikayı bir profil içerisine yükleyip sonra bu profili iOS cihaza yükleyebilirsiniz. Ben aşağıda görüldüğü şekilde bu metodu kullandım. 7. iOS cihazın proxy ayarlarını test yapmak istediğimiz proxy uygulamasına yönlendirip HTTPS trafiğin Certificate Pinning kullanan uygulamalarda dahi sertifika uyarısı almadan decrypt edilebildiğini ağağıdaki şekilde görebilmekteyiz. Örnek İstek (Request): GET https://api.twitter.com/1.1/account/verify_credentials.json?application_id=com.apple.P references HTTP/1.1 Authorization: OAuth oauth_nonce="7E3E57E0-16CA-4D40-B7DB-511XXXXXXXX", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1411218235", oauth_consumer_key="WXZE9QillkIZpTANxxxxxx", oauth_token="2413629533- pNKcOWzwYGmWKhKzE1A7qz36Nmi1xxxxxxxxx", oauth_signature="NhD0X4C%2BDIaETSSnDYUXXXXXXXXX", oauth_version="1.0" Accept: */* Cookie: guest_id=v1%3A141121693454xxxxxxx Accept-Language: en-us Connection: keep-alive
  • 19. Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitlemeyi Devre Dışı Bırakma Proxy-Connection: keep-alive User-Agent: Settings/1.0 CFNetwork/672.1.15 Darwin/14.0.0 Host: api.twitter.com Örnek Cevap (Response): "id":2413629533,"id_str":"2413629533","name":"Anonymous","screen_name":"xxxxxxxx","loc ation":"Earth","description":"","url":"http://t.co/LC0vThu4ID","entities":{"url":{" urls":[{"url":"http://t.co/LC0vThu4ID","expanded_url":"http://www.google.com","di splay_url":"google.com","indices":[0,22]}]},"description":{"urls":[]}},"protected":fal se,"followers_count":4,"friends_count":2,"listed_count":0,"created_at":"Sat Mar 15 21:00:21 +0000 2014","favourites_count":5,"utc_offset":null,"time_zone":null,"geo_enabled":false,"ver ified":false,"statuses_count":14,"lang":"en","status":{"created_at":"Wed Apr 02 22:15:12 +0000 2014","id":451483009699819521,"id_str":"451483009699819521","text":"Geru00e7ek para degil belki ama yinede kur deu011ferleri u00f6nemlinBitcoin = $ 437.33nLitecoin = $ 11.20nPeercoin = $ 1.77nMastercoin = $ 32.00","source":"u003ca href="http://twitter.com/download/iphone" rel="nofollow"u003eTwitter for iPhoneu003c/au003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_sta tus_id_str":null,... Not: Cihazınızda bu dökümanda gösterilen değişikleri yapmak çok büyük güvenlik zaafiyeti oluşturmaktadır. Lütfen testlerinizi test cihazları veya emülatörler üzerinde yapınız. Referanslar https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning https://www.owasp.org/images/f/f1/Pubkey-­‐pin-­‐supplement.pdf https://www.owasp.org/index.php/Pinning_Cheat_Sheet http://media.blackhat.com/bh-­‐us-­‐ 12/Turbo/Diquet/BH_US_12_Diqut_Osborne_Mobile_Certificate_Pinning_Slides.pdf https://developer.android.com/training/articles/security-­‐ssl.html https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html https://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html https://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html https://android.googlesource.com/platform/external/apache-­‐ http/+/2f0e9505248dc19d7fcfed4c1efd7c3daf863f03/src/org/apache/http/conn/ssl/SSLSocketFactory.java https://github.com/iSECPartners/Android-­‐SSL-­‐TrustKiller http://www.cydiasubstrate.com/ http://www.cydiasubstrate.com/inject/android/ https://developer.apple.com/library/prerelease/mac/documentation/Security/Reference/secureTransportRef/ 18