本帖最后由 adopi 于 2023-3-26 22:51 编辑
原文链接:【红队技巧】通过Tor + Proxychains/Proxifier 来尽可能隐藏入侵痕迹
正文01 本节重点快速预览
02 基础环境准备
03 具体实现
(1)什么是“洋葱路由协议”?其内部数据的创建,发送与加密过程的大致通信流程?
上世纪 90 年代初,美国海军研究实验室为了保护美国在线情报系统而开发了洋葱路由,之所以被称为洋葱路由是因为要发送的原始消息被一层一层加密包装成像洋葱一样的数据包。
至于被包裹的层数则取决于到达最终目的地中间所经过的总节点数,每经过一个节点就会将数据包的最外层解密,这样也使得中间所经过的任何一个节点都无法同时知晓这个消息最初与最终的目的地在哪儿,使发送者在一定程度上达到了匿名的效果。
对背景简单科普之后,我们开始发起一个匿名请求,为了组装洋葱数据包,原始消息发送者会从现有的Tor 节点中随机选出一部分,并用这些节点规划出一条线路,也就是该洋葱数据包,为尽可能隐匿原始消息的发送者,这条线路中间的任何一个节点都无法确定前一个节点是原始消息发送者还是同线路中的另一个节点。
同样,该线路中间的任何一个节点也无法确定下一个节点是最终的目的节点还是整条线路中的另一个节点,只有该线路中的最后一个节点才能确定自己是最终的目的节点,即所谓 "出口节点" ,与之相反的则是整条线路中的第一个节点,即所谓 "入口节点"。
另外,洋葱路由的所有节点使用的是非对称加密,也代表无法通过常规嗅探手段来获取节点中的敏感数据,大致的加密过程是这样:
首先,发送者会从目录节点中获取一个公钥,用此公钥把要发送的原始消息加密,然后传输给入口节点,并与入口节点建立连接和共享秘钥。此后,发送者可以通过这条连接把加密过的消息发送至线路上的第二个节点,此时发送的加密消息只有第二个节点可以解密,当第二个节点收到此消息后,便会立即与前一个节点,也就是入口节点,建立同样的连接。
这样一来,发送者的消息就可以顺利到达线路中的第二个节点,在前面我们也提到过,当前节点是无法确定上一个节点在当前线路中的具体身份的,发送者通过入口节点和第二个节点中间的这条连接将只有第三个节点能解密的消息发送给第三个节点。此时,第三个节点用和之前同样的方式与第二个节点继续建立连接,如此循环往复。
直到最后,线路上的所有节点的连接建立完成,消息最终达到出口节点,出口节点回传数据时也是以同样的方式对数据进行层层加密,只是顺序完全相反。
(2)了解完洋葱路由协议的基本运作模式之后,那么下面我们就来搭建tor服务。
- <div align="left">首先到vps上安装tor,安装方法如下:</div><font color="rgb(92, 99, 112)"><i># vi /etc/apt/sources.list 添加源</i></font>
- deb <a href="http://deb.torproject.org/torproject.org" target="_blank">http://deb.torproject.org/torproject.org</a> bionic main
- deb-src <a href="http://deb.torproject.org/torproject.org" target="_blank">http://deb.torproject.org/torproject.org</a> bionic main
- <font color="rgb(92, 99, 112)"><i># gpg --keyserver keyserver.ubuntu.com --recv-key A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89</i></font>
- <font color="rgb(92, 99, 112)"><i># gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -</i></font>
- <font color="rgb(92, 99, 112)"><i># apt update</i></font>
- <font color="rgb(92, 99, 112)"><i># apt install tor deb.torproject.org-keyring -y </i></font>
- <font color="rgb(92, 99, 112)"><i># /etc/init.d/tor start 启动 tor 服务</i></font>
- <font color="rgb(92, 99, 112)"><i># vi /etc/tor/torrc 编辑 tor 的主配置文件,对tor进行以下配置</i></font>
- Log notice file /var/<font color="rgb(230, 192, 123)">log</font>/tor/notices.log
- RunAsDaemon 1
- ORPort 443
- Exitpolicy reject *:*
- BridgeRelay 1
- ServerTransportPlugin obfs4 <font color="rgb(230, 192, 123)">exec</font> /usr/bin/obfs4proxy
- ExtORPort auto
- PublishServerDescriptor 0
- ContactInfo 88888
- Nickname GentleNi
- <font color="rgb(92, 99, 112)"><i># /etc/init.d/tor restart 重启 tor 服务,让配置生效</i></font>
复制代码
(3)至此,tor服务基本算是搭建完成,那么下面我们就来通过tor访问外部网络。
因为我们要用 proxychains-ng 连接到 tor 的 socks 端口上,所以,事先装 proxychains-ng,此处暂以 kali 为例进行安装,如下: - apt-get install proxychains4 -y
复制代码
而后开始简单配置 proxychains-ng,可以直接用-f 选项加载配置文件来执行。
- <font color="rgb(92, 99, 112)"><i># egrep -v "^$|^#" /etc/proxychains4.conf</i></font>
- <font color="rgb(92, 99, 112)"><i># vi /etc/proxychains4.conf</i></font>
- strict_chain
- proxy_dns
- remote_dns_subnet 224
- tcp_read_time_out 15000
- tcp_connect_time_out 8000
- <font color="rgb(92, 99, 112)"><i># 设置代理链,此处 socks 协议类型要选择 socks5,ip 和端口务指向tor[vps]</i></font>
- <font color="rgb(92, 99, 112)"><i># 这样一来,当再用 proxychains4 去启动指定程序时就会自动从 tor 网络走</i></font>
- [ProxyList]
- SocksPort 0.0.0.0:8090
复制代码
以下就是实际的代理效果: - proxychains4 -f /etc/proxychains4.conf firefox
复制代码
(4)综上所述,我们应该已经差不多掌握了tor的基本应用,接下来就开始利用 tor 来实现分钟级切换 ip。
其实,非常简单,需要事先说明的是,在 torrc 的配置中,确实有换 ip 的选项,但多次测试,并无实用性,所以就得使用笨一点方法来搞。首先,tor 每次重启服务,因为内部会直接重新规划了一条线路,所以都会换切换ip,这样我们便可以简单写个脚本,定时重启服务就好,具体如下: 回到vps上。 - <font color="rgb(92, 99, 112)"><i># chmod +x tor.sh</i></font>
- <font color="rgb(92, 99, 112)"><i># ./tor.sh</i></font>
- uto change ip
- <font color="rgb(92, 99, 112)"><i># by klionsec</i></font>
- tor=`<font color="rgb(230, 192, 123)">which</font> tor`
- <font color="rgb(198, 120, 221)">if</font> [ ! -f <font color="rgb(209, 154, 102)">$tor</font> -a -z <font color="rgb(209, 154, 102)">$tor</font> ];<font color="rgb(198, 120, 221)">then</font>
- apt install tor -y &>/dev/null
- <font color="rgb(198, 120, 221)">if</font> [ $? -eq 0 ];<font color="rgb(198, 120, 221)">then</font>
- <font color="rgb(230, 192, 123)">echo</font> <font color="rgb(152, 195, 121)">"Tor is installed !"</font>
- <font color="rgb(198, 120, 221)">fi</font>
- <font color="rgb(198, 120, 221)">fi</font>
- <font color="rgb(198, 120, 221)">if</font> [ ! -f /var/run/tor/tor.pid ];<font color="rgb(198, 120, 221)">then</font>
- /etc/init.d/tor start &>/dev/null
- <font color="rgb(198, 120, 221)">if</font> [ $? -eq 0 ];<font color="rgb(198, 120, 221)">then</font>
- sleep 1;<font color="rgb(230, 192, 123)">echo</font> <font color="rgb(152, 195, 121)">"Tor services is start succeed !"</font>
- <font color="rgb(198, 120, 221)">fi</font>
- <font color="rgb(198, 120, 221)">else</font>
- /etc/init.d/tor restart &>/dev/null
- <font color="rgb(198, 120, 221)">if</font> [ $? -eq 0 ];<font color="rgb(198, 120, 221)">then</font>
- sleep 1;<font color="rgb(230, 192, 123)">echo</font> <font color="rgb(152, 195, 121)">"Tor services is restart succeed !"</font>
- <font color="rgb(198, 120, 221)">fi</font>
- <font color="rgb(198, 120, 221)">fi</font>
复制代码
而后,配置计划任务,定时执行即可实现频繁切换 ip 的效果,此处是每 2分钟重启一次。 # crontab -e
* * * * * (sleep 120;/root/tor.sh)
# crontab -l
注意看前后的时间,切 ip 的效果基本已经实现了。 (5)简单小结
不得不面对的现实是,即使使用 tor,也并不能完全做到在网络中的绝对匿名,况且 tor 本身也存在着诸多的设计缺陷,如:出口漏洞,节点监听等。
所以在使用 tor 时不要在网络中留下所有涉及到个人隐私信息相关的东西,且务必做好自己vps的防护。如果别人想在 tor 网络中找到你,比较好的办法就是社工,通过在 tor 的一些敏感特征,满世界的搜集和这些特征相关的信息,但如果反社工做的非常到位,问题基本都不会太大。
此次仅为 tor 的基本使用。值得注意的是,挂上 tor 以后,速度会稍微有些慢,这都很正常,因为它的速度取决于规划的这条链路中间的所有中继节点的网络状况。如果中继节点的网络状态都还不错,自然速度也不会太慢。另外,如果想拿 tor 访问国内的站点基本都是访问不了,因为 tor 本身就被墙掉了。
当然,除了这些外部原因,层层节点不停的加解密,对性能和速度肯定也是有一定损耗。顺便再强调一句,用 tor 来频繁切 ip 没问题,但频率不宜过快,大家在平时使用时也要尽量自己学着灵活应变。 Taps:
文章来源:联想全球安全实验室
|