美文网首页抓包Charles
防抓包(证书攻击)策略-iOS

防抓包(证书攻击)策略-iOS

作者: 程序员不务正业 | 来源:发表于2018-10-22 15:46 被阅读39次

1、客户端进行判断是否设置了代理(对测试人员不友好)

+ (BOOL)getProxyStatus {
    NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]);
    NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.google.com"], (CFDictionaryRef)proxySettings) autorelease]);
    NSDictionary *settings = [proxies objectAtIndex:0];
    
    NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
    NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
    NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
    
    if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
    {
        //没有设置代理
        return NO;
    }
    else
    {
        //设置代理了
        return YES;
    }
}

2、客户端本地做证书校验,并且设置不仅仅校验公钥,设置完整的正式校验模式

2.1把证书机构签完的公钥证书放到工程里名称为"server.cer"
2.2设置AFSSLPinningMode

  
typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
    AFSSLPinningModeNone,//(默认级别),客户端无条件信任任何下发的公钥证书
    AFSSLPinningModePublicKey,//客户端本地去验证服务端下发的公钥证书的 public keys部分。如果正确才通过
    AFSSLPinningModeCertificate,//客户端本地去验证服务端下发的公钥证书的所有部分。如果正确才通过
};

使用AFSSLPinningModePublicKey和AFSSLPinningModeCertificate方法基本可以防止青花瓷等的证书攻击

+(AFSecurityPolicy*)customSecurityPolicy
{
    // /先导入证书
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"server" ofType:@"cer"];//证书的路径
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    // AFSSLPinningModeCertificate 使用证书验证模式 (AFSSLPinningModeCertificate是证书所有字段都一样才通过认证,AFSSLPinningModePublicKey只认证公钥那一段,AFSSLPinningModeCertificate更安全。但是单向认证不能防止“中间人攻击”)
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
    // 如果是需要验证自建证书,需要设置为YES
    securityPolicy.allowInvalidCertificates = YES;

    //validatesDomainName 是否需要验证域名,默认为YES;
    //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

    //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
    //如置为NO,建议自己添加对应域名的校验逻辑。
    securityPolicy.validatesDomainName = YES;
    NSSet<NSData*> * set = [[NSSet alloc]initWithObjects:certData  , nil];
    securityPolicy.pinnedCertificates = set;
        
    return securityPolicy;
}

!bug

所有方法都是有漏洞的,iOS的app够安全,但是圈内依然有一群逆向工程师

方法1中在使用Class-Dump还是能够找到方法并且运行时替换或者直接hook方法进行修改返回逻辑,动态库注入方式,再使用企业签名把ipa包进行重新签名ios-app-signerfir发布

方法2中在逆向工程师眼里也是很简单破解的,app砸壳,再显示包内容,依然可以直接把你证书放在青花瓷中使用。

只是提高了破解难度,有树叶遮羞总比裸露在外面好一点

相关文章

  • 防抓包(证书攻击)策略-iOS

    1、客户端进行判断是否设置了代理(对测试人员不友好) 2、客户端本地做证书校验,并且设置不仅仅校验公钥,设置完整的...

  • iOS Charles抓包

    级别:★★☆☆☆标签:「iOS手机抓包」「iOS HTTPS抓包」「Charles证书」作者: Xs·H审校: Q...

  • Android Charles https 证书固定 防抓包-2

    Android Charles https 证书固定 防抓包 Android Charles 证书固定最近在做公司...

  • AFNetworking https SSL证书

    AFNetworking https SSL证书博客地址 保证数据安全(禁止抓包拿到数据) 防止中间人攻击。攻击者...

  • ios 防抓包

    - (void)checkHTTPEnable { NSDictionary * ref = (__bridg...

  • ios9.3.2以后charles 抓包

    ios9.3.2 以后设置抓包需要在系统根证书地方点击信任才可以重新抓包。系统默认关闭的。

  • IOS 去掉强校验

    IOS有时抓不到包,当进行了证书校验,BurpSuite和Charles就无法抓到数据包。这时候需要去掉证书校验,...

  • HTTPS

    iOS客户端校验https网络请求证书 iOS开发 支持https请求以及https请求的抓包 NSURLConn...

  • iOS Charles使用

    Charles iOS抓包Https,iOS最新系统抓包 Charles抓包入门(Mac/iOS,HTTP/HTT...

  • (iOS) App防抓包

    大致有两种做法,一种是检测到有代理服务器,就不发送网络请求;一种是不发送给代理服务器,而是正常发给目标服务器。 第...

网友评论

    本文标题:防抓包(证书攻击)策略-iOS

    本文链接:https://www.haomeiwen.com/subject/ogjmaftx.html