代理池

近期由于工作中的遇到的问题,在研究代理池,其实代理池应该说已经是比较成熟的技术,而且在飞速发展,比如现在主流的“秒拨”技术,给企业在风险IP识别和判定上带来极大的难度。代理池技术目前被广泛用于爬虫、灰黑产、SEO、网络攻击、刷单、薅羊毛等等领域。

0x01 代理服务器原理和类型

当客户端对服务器端提出请求时,此请求会被送到代理服务器,代理服务器转发用户请求到 实际服务器端。

代理类型一共分为四种:透明代理、匿名代理、高匿代理、混淆代理
安全程度:高匿 > 混淆 > 匿名 > 透明
代理类型主要取决于代理服务器端的配置,不同配置会形成不同的代理类型。在配置中,有三个变量是决定性因素:

1、REMOTE_ADDR:REMOTE_ADDR 表示客户端的 IP,但是它的值不是由客户端提供的,而是服务器根据客户端的 IP 指定的。如果使用浏览器直接访问某个网站,那么网站的 web 服务器(Nginx、Apache等)就会把 REMOTE_ADDR 设为客户端的 IP 地址。我们给浏览器设置代理,我们访问目标网站的请求会先经过代理服务器,然后由代理服务器将请求转化到目标网站。那么网站的 web 服务器就会把 REMOTE_ADDR 设为代理服务器的 IP。

2、X-Forwarded-For(XFF):X-Forwarded-For 是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP。当客户端使用了代理时,web 服务器就不知道客户端的真实 IP 地址。为了避免这个情况,代理服务器通常会增加一个 X-Forwarded-For 的头信息,把客户端的 IP 添加到头信息里面。如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:

3、HTTP_VIA: via 是 HTTP 协议里面的一个header,记录了一次 HTTP 请求所经过的代理和网关,经过1个代理服务器,就添加一个代理服务器的信息,经过2个就添加2个。

0x02 代理类型的区别

1、透明代理(Transparent Proxy):
代理服务器的配置如下:

REMOTR_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWORDED_FOR = Your IP

透明代理虽然可以直接“隐藏”客户端的 IP 地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到客户端的 IP 地址。

2、匿名代理(Anonymous Proxy):
代理服务器的配置如下:

REMOTR_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWORDED_FOR = Proxy IP

匿名代理能提供隐藏客户端 IP 地址的功能。使用匿名代理,服务器能知道客户端使用了代理,但无法知道客户端真实 IP 地址。

3、混淆代理(Distorting Proxy):
代理服务器的配置如下:

REMOTR_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWORDED_FOR = Random IP

与匿名代理的原理相似,但是会伪装得更逼真。如果客户端使用了混淆代理,服务器还是能知道客户端在使用代理,但是会得到一个假的客户端 IP 地址。

4、高匿代理(Elite Proxy):
代理服务器的配置如下:

REMOTR_ADDR = Proxy IP
HTTP_VIA = not determined
HTTP_X_FORWORDED_FOR = not determined

高匿代理既能让服务器不清楚客户端是否在使用代理,也能保证服务器获取不到客户端的真实 IP 地址。

0x03 搭建一个代理池

搭建代理池可以选择免费和付费两种方式,国内一些免费的IP代理资源包括:

https://ip.ihuan.me/Proxies.7z
http://www.89ip.cn/
https://www.xicidaili.com/
...

这些免费资源有的已经提供API,我们直接可以提取代理资源。另外一部分需要我们将代理IP爬取下来,比如西刺免费代理:

目前,在github上有许多搭建代理池的项目,可以进行参考:

https://github.com/iamhmx/MXProxyPool
https://github.com/jhao104/proxy_pool
https://github.com/xiaobeibei26/dynamic_ip_pool
https://github.com/henson/proxypool
...

原理一般是通过爬取各个免费的代理资源中的代理IP信息,存储到本地,进行性验证,维护可用代理IP列表,然后在需要使用的时候取出代理IP。

免费的资源最大的问题就是代理IP不可用、不稳定,测试下来,虽然能爬取几千个代理IP,但真正用的可能在10个以内,利用率在1%左右。 另外就是付费模式,这里国内也有很多的服务提供商,现在提供的服务模式多种多样,长期的,包月的,甚至可以按次服务。一般来说代理的匿名度越高,时效越长,价格也越贵。

0x04 代理池攻防

自从企业开始在IP层面根据一些阻断的规则(如设定单位时间内IP的访问次数阈值、限制触发特定行为的IP等)起,攻防的较量就开始了。为了绕过企业的IP阻断规则,早期黑产获取代理IP的方式主要利用高性能的服务器对全网进行扫描,扫描开放代理服务的服务器,或者是直接爬取其他代理网站的数据,收录有效代理IP和端口。全网的代理IP数量相对有限,稳定性也堪忧,而通过VPN的方式成本又太高。同时,不少甲方也慢慢开始积累代理IP威胁情报信息,进一步打压了黑产使用代理IP的效果。

攻防升级,黑产迅速研发出“秒拨”技术。通俗的讲,秒拨的底层思路就是利用国内家用宽带拨号上网(PPPoE)的原理,每一次断线重连就会获取一个新的IP。黑产掌握大量宽带线路资源,部署自动断线重连切换IP以及攻击的工具后,便可发起攻击。

现在很多付费的代理池资源,都是利用的“秒拨”技术,“秒拨”对基于ip的安全防护和风控措施构成了严峻的挑战:一方面秒拨ip数量巨大,因为地区级的宽带ip池往往有十万甚至百万级别的ip数;另一方面,秒拨ip可做到秒级切换,且与正常用户共用ip池,使用者可能在极短时间内从正常用户变为黑灰产,导致识别难度较大,而且一旦大规模封禁,很有可能造成误伤,引起客户投诉。

最近,一年一度的大型攻防演习即将开始,类似“秒拨”的代理池技术同样会给防守方带来巨大挑战。攻击方如果采用代理池技术,可能会对防守方产生两个极端影响:
1、如果攻击方将攻击流量分散在大量IP中,极端情况下每一个ip一次攻击,SIEM这类的综合分析系统可能根本不会产生告警,因为攻击没有达到告警阈值,只能人工去分析各类安全告警日志,发现可能异常,类似于威胁狩猎。

2、攻击者利用海量代理IP产生海量攻击,则防守方也会产生海量告警和海量阻断IP的请求,造成Alert DOS和Block DOS,一方面消耗防守大量的精力进行分析,另一方面甚至造成封禁IP的个数超过防守方设备上限,使其防御体系失效,而此时再进行针对性的攻击,就可以达到声东击西的效果。

总之,以“秒拨”为代表的代理池技术已然成为当下安全行业的痛点之一,仅仅依靠威胁情报、网络层封IP的方式已经难以应对,需要重点从应用层面去解决。对于这个痛点,行业内也在积极探索解决方案,出现了“动态防御”的理念,通过动态封装、动态混淆,动态令牌和动态验证来有效进行人机识别。

技术不分好坏,代理池技术在黑产手上会给企业带来极大困扰,但企业也可尝试利用代理池技术提升运营质量,这块下回再说。今天是五一国际劳动节,向所有劳动者致敬!

posted @ 2020-05-13 14:37  0DayBug  阅读(4208)  评论(0编辑  收藏  举报