2014年9月6日星期六

完整CentOS搭建OpenVPN服务环境图文教程

对于OpenVPN环境有什么用途老左就不多说,因为看到这样的信息的朋友应该都了解且有需要使用这样的教程。这篇教程是老左让@水清流同学花费几个小时整理出来的,且经过多次重装实战演练确定成功可以安装和使用的,VPS环境基于CENTOS6环境下安装,如果你也想安装不凡认真看看下面的教程,写的真比较详细。
第一步、为vps安装openvpn及所有所需软件
A:安装EPEL仓库
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
B:安装openvpn
yum install openvpn
C:安装openvpn最新的easy-rsa,该包用来制作ca证书,服务端证书,客户端证书。最新的为easy-rsa3
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
如果你的机器不支持UNZIP命令可以参考”解决Linux VPS安装UNZIP组件解压文件“文章。
D:将解压得到的文件夹easy-rsa-master重命名为easy-rsa
mv easy-rsa-mater/ easy-rsa/
然后将的到的easy-ras文件夹复制到/etc/openvpn/目录下
cp -R easy-rsa/ /etc/openvpn/
第二步、编辑vars文件,根据自己环境配置
A:先进入/etc/openvpn/easy-rsa/easyrsa3目录
cp /etc/openvpn/easy-rsa/easyrsa3/
B:复制vars.example 为vars
cp vars.example vars
C:修改下面字段,命令:vi vars,然后修改,最后wq保存
set_var EASYRSA_REQ_COUNTRY “CN” //根据自己情况更改
set_var EASYRSA_REQ_PROVINCE “Beijing”
set_var EASYRSA_REQ_CITY “Tong”
set_var EASYRSA_REQ_ORG “qingliu Certificate”
set_var EASYRSA_REQ_EMAIL “shuiqingliu14@gmail.com”
set_var EASYRSA_REQ_OU “My OpenVPN”
第三步、创建服务端证书及key
A:进入/etc/openvpn/easy-rsa/easyrsa3/目录初始化:
./easyrsa init-pki

B:创建根证书
./easyrsa build-ca
如下:
Generating a 2048 bit RSA private key
…………………………………….+++
……+++
writing new private key to ‘/root/easy-rsa/easyrsa3/pki/private/ca.key’
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:qingliu
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/root/easy-rsa/easyrsa3/pki/ca.crt
注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。
eg:Common Name (eg: your user, host, or server name) [Easy-RSA CA]:qingliu
我输入qingliu
C:创建服务器端证书
./easyrsa gen-req server nopass
如下:
[root@localhost easyrsa3]# ./easyrsa gen-req server nopass
Generating a 2048 bit RSA private key
……………………………………………………………………..+++
……………………+++
writing new private key to ‘/root/easy-rsa/easyrsa3/pki/private/server.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Common Name (eg: your user, host, or server name) [server]:shuiqingliu
Keypair and certificate request completed. Your files are:
req: /root/easy-rsa/easyrsa3/pki/reqs/server.req
key: /root/easy-rsa/easyrsa3/pki/private/server.key
该过程中需要输入common name,随意但是不要跟之前的根证书的一样

签约服务端证书:
./easyrsa sign server server
如下:
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:
subject=
commonName = shuiqingliu
Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /root/easy-rsa/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /root/easy-rsa/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
commonName:PRINTABLE:’shuiqingliu’
Certificate is to be certified until Apr 20 06:02:10 2024 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /root/easy-rsa/easyrsa3/pki/issued/server.crt
该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那你就重头开始再来一次吧。

D:创建Diffie-Hellman,确保key穿越不安全网络的命令:
./easyrsa gen-dh
如下:
Note: using Easy-RSA configuration from: ./vars
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
……..+……………………………….+..+…………………………………………………………………………………………………………………………….
DH parameters of size 2048 created at /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem
第四步、创建客户端证书
A:进入root目录新建client文件夹,文件夹可随意命名,然后拷贝前面解压得到的easy-ras文件夹到client文件夹,进入下列目录
cd /root/
mkdir client && cd client
cp -R easy-rsa/ client/
cd client/easy-rsa/easyrsa3/
B:初始化
./easyrsa init-pki
C:创建客户端key及生成证书(记住生成是自己输入的密码)
./easyrsa gen-req qingliu //名字自己定义

D:将的到的qingliu.req导入然后签约证书
a.进入到/etc/openvpn/easy-rsa/easyrsa3/
cd /etc/openvpn/easy-rsa/easyrsa3/
b.导入req
./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/qingliu.req qingliu
c.签约证书
./easyrsa sign client qingliu
//这里生成client所以必须为client,qingliu要与之前导入名字一致
上面签约证书跟server类似,就不截图了,但是期间还是要输入CA的密码
E:这步很重要,现在说一下我们上面都生成了什么东西
服务端:(etc/openvpn/easy-rsa/文件夹)
/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server.req
/etc/openvpn/easy-rsa/easyrsa3/pki/reqs/qingliu.req
/etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key
/etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key
/etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/issued/qingliu.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem
客户端:(root/client/easy-rsa文件夹)
/root/client/easy-rsa/easyrsa3/pki/private/qingliu.key
/root/client/easy-rsa/easyrsa3/pki/reqs/qingliu.req //这个文件被我们导入到了服务端文件所以那里也有
a.这一步就是拷贝这些文件放入到相应位置。将下列文件放到/etc/openvpn/ 目录执行命令:
cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn
cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn
这样就将上述四个文件放入到了/etc/openvpn目录下
b.这一步将下列文件放到/root/client 目录下执行命令:
cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client
cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/qingliu.crt /root/client
cp /root/client/easy-rsa/easyrsa3/pki/private/qingliu.key /root/client
这样就将上述三个文件复制到了/root/client目录,包括:ca.crt、qingliu.crt、qingliu.key
第五步、为服务端编写配置文件
当你安装好了openvpn时候,他会提供一个server配置的文件例子,在
/usr/share/doc/openvpn-2.3.2/sample/sample-config-files
下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn
cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn
然后修改配置vi server.conf如下:
local 192.227.161.xx(跟自己vps IP)
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push “redirect-gateway def1 bypass-dhcp”
push “dhcp-option DNS 8.8.8.8″
keepalive 10 120
comp-lzo
max-clients 100
persist-key
persist-tun
status openvpn-status.log
verb 3
每个项目都会由一大堆介绍,上述修改,openvpn提供的server.conf已经全部提供,我们只需要去掉前面的注释#,然后修改我们自己的有关配置。
第六步、下载openvpn客户端,并进行配置
A:用sftp将我们在vps生成的客户端证书和key下载到客户端电脑
ca.crt qingliu.crt qingliu.key //这三个文件
B:去官网下载openvpn客户端进行安装,然后安装目录找到simple-config
D:\Program Files\OpenVPN\sample-config\client.ovpn
将client.ovpn 复制到D:\Program Files\OpenVPN\config下,当然我把客户端装在了D盘你根据自己情况选择.
将下载到的三个文件放入D:\Program Files\OpenVPN\config下然后如下:

编辑配置文件:
client
dev tun
proto udp
remote 192.227.161.xx 1194 //主要这里修改成自己vps ip
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt //这里需要证书
cert qingliu.crt
key qingliu.key
comp-lzo
verb 3
我们只需要以上项目每行一个。
第七步、测试排错
A:启动vps上的openvpn服务
Service openvpn start
Oh,不幸的是出现service start failed!!!
但是当你运行:
Openvpn /etc/openvpn/server.conf
又可以运行,解决办法:
删除/etc/openvpn/下的ipp.txt openvpn-status.log
然后就可以启动服务了。如果你还不能解决,那就去var/log中找message慢慢分析原因
B:启动客户端
打开openvpn gui启动,注意在启动后需要输入创建qingliu.key时候的密码!我前面让你记住过的。然后进入如下界面

当不能长时间连接的时候你需要查看出错误log,我第一链接时候出错了,tls的某个错但是我已经解决了就是注释掉客户端配置文件中的#ns-cert-type server,这样就不会出错了。我提供给你的配置选项一修复问题。
鉴于以上操作,你的openvpn已经应该可以争取运行了如下:

如果不能正常工作,请执行下面步骤:查看客户端和服务器端log———–google相应错误以及在openvpn官方论坛查找答案——solve it
如果有朋友需要其他的VPN安装可以参考教程:
结束语:
本次配置openvpn,我们需要足够的耐心可以不言弃的决心。最重要的部分在easy-rsa的证书部分,需要细心配置。网络上关于easy-rsa3的操作资料非常少几乎只有官方文档有,easy-rsa3跟easy-rsa 2.0操作完全不同,因此大多数教程只适用于2.0版本,这次教程基于easy-rsa3,我觉得3的操作更简单。当遇到问题时候积极去各大搜索引擎论坛去查找资料来完成我们的搭建,祝您折腾顺利!
以上为@水清流同学供稿,足够的保证教程的完整性,如果有朋友在安装过程中出现问题,可以联系老左,让这位同学代为安装。过程是漫长的,对于有需要的朋友来说还是必须使用到的。
本文出自:http://www.laozuo.org, 原文地址:http://www.laozuo.org/2211.html, 感谢原作者分享。

2014年8月31日星期日

沙盘(Sandboxie)使用教程

在浏览网页的时候,即使安装了杀毒软件还是免不了给某些恶意软件入侵,病毒木马随之而来。不但造成资料的损失,而且还会造成帐号被盗等等你不想发生的事件。你会经常安装卸载软件么?而这些喜好往往造成系统臃肿及混乱不堪。可不可以在安装使用这些软件的同时不影响操作系统呢?安装程序中带有病毒,但是我要用到该程序,该怎么办呢?在这里笔者为大家介绍一款软件《Sandboxie》,有了它,就可以放心的在因特网中冲浪而不必担心中毒,甚至可以不安装杀毒软件了(只是举例,不推荐不安装杀毒软件,因为病毒不只是由浏览网页而感染这个途径)。有了它,你就可以放心的安装使用软件,而不必担心因此影响系统稳定性与安全性了。

  一、 Sandboxie 的简介及安装
  Sandboxie允许你在沙盘环境中运行浏览器或其他程序。因此,在沙盘中运行的程序所产生的变化可以随时删除。可用来保护浏览网页时真实系统的安全,也可以用来清除上网、运行程序的痕迹,还可以用来测试软件,测试病毒等用途。即使在沙盘进程中下载的文件,也可以随着沙盘的清空而删除。
  这和虚拟机(VMWare/ Microsoft Virtual PC)有点相似,但是却不相同。
  因为虚拟机(VMWare/ Microsoft Virtual PC)是在真实的系统中建立一个完全虚拟的另一个操作系统(比如在windows XP中虚拟Linux)。与虚拟机不同之处在于,sangboxie并不需要虚拟整个计算机,它只根据现有系统虚拟一个环境让指定程序运行在其中,因此,若你的真实系统是windows XP的,则在sandboxie中运行的程序也是在windowsXP环境中运行的,也可以直接访问你硬盘上的现有文件,只是相关的变动是在虚拟环境中进行了。这样,比较节约系统资源,对计算机配置要求较低。
  引用官方的一段话:电脑就像一张纸,程序的运行与改动,就像将字写在纸上。而sandboxie就相当于在纸上放了块玻璃,程序的运行与改动就像写在了那块玻璃上,除去玻璃,纸上还是一点改变都没有的。

图1 官方原理图
  Sandboxie的安装
  点击下载Sandboxie英文版(32-bit)Sandboxie 3.0          Sandboxie 3.0_沙盘_简体中文汉化补丁
  Sandboxie为英文版,暂时没有官方的简体中文版,对英文不感冒的网友可以下载相关汉化程序来汉化Sandboxie,但是汉化可能会造成Sandboxie在某些地方出错,导致Sandboxie无法正常运行。
  Sandboxie的安装非常简单,只需要一直下一步(next)就能完成安装。

图2 安装界面
  Sandboxie可以免费使用30天,30天后会不定期提醒你注册。非注册版本有些功能不能使用,比如强制某程序始终运行在沙盘环境中这个功能。
二、 Sandboxie的使用

  首次启动,Sandboxie会介绍自身原理

图3 Sandboxie的原理
  点击Learn More(学习更多)就会出现Sandboxie的用途

图4 Sandboxie的用途举例

  接着Sandboxie会提醒你没有建立配置文件,只需要点击ok就可以自动建立新的配置文件了。

图5 提示建立配置文件
接下来我们来举几个例子,说明与测试Sandboxie的用途,Sandboxie的更多的用途要靠你通过使用来发掘哦。
  使用举例一 安全的浏览网页
  右键单击Sandboxie在任务栏的图标,在弹出的菜单栏里选择run Sandboxed →Internet Explorer (快捷键为ctrl+n)。如图6

图6 虚拟运行ie
  这个时候就会自动弹出ie浏览器,如果你仔细观察,可以看到在ie的标题栏文字的前后加多了[#],没错,这是Sandboxie在提醒你现在ie处于沙盘中的虚拟运行状态,它的任何改变都不会造成真实系统的任何变化。

图7 提示符号
  真的是这样么?我们来试验一下。我们在ie处于沙盘中的虚拟运行状态时,用虚拟ie来浏览某一带毒的网站,来看看是否会把病毒感染到真实系统中去。

图8 真实系统中的杀毒软件macfee对该网站病毒的警报
我们先抓取IceSword对真实系统进程的查看信息,

图9 IceSword的第一次抓图
  然后再虚拟ie来浏览带毒的网站,理论上来说这时如果你没装杀毒软件没打系统补丁没在沙盘中运行ie的话,你的电脑就已经感染病毒了。我们通过查看Sandboxie中的主界面(在这里可以看到沙盘中正在运行的程序列表)可清楚看到由于浏览该病毒网站,导致一堆病毒已经在该沙盘中生根发芽了。(如图10)

图10 Sandboxie中的正在运行的病毒

  接着我们关闭sandboxie的当前沙盘(相当于关闭该沙盘里的所有程序,包括虚拟ie
具体操作:右键单击Sandboxie在任务栏的图标,在弹出的菜单栏里选择Terminate Sandboxed Processes-->In Current sandbox(当前沙盘)或者是In All Sandboxes(所有沙盘)。


图11 关闭沙盘
  接着再抓取IceSword对真实系统进程的查看信息,

图12 IceSword的第二次抓图
  经前后对比,初步得出判断,病毒没有感染到真实系统中去。
  使用举例二 安全的使用软件
  右键单击Sandboxie在任务栏的图标,在弹出的菜单栏里选择run Sandboxed →any Program(运行任何程序)快捷键为ctrl+r ,然后浏览找到并选择需要运行的程序后再点ok。或者直接在可执行的文件中单击鼠标右键,,在弹出的菜单栏里选择run Sandboxed。

图13 第一种启动方法


图14第二种启动方法
  通过这么运行,该程序就运行在了沙盘中,该程序的任何改变都不会造成真实系统的任何变化。我们还是以试验来证明。
  以安装某一共享软件为例,该软件捆绑了三个附加插件(如图15)

图15 附加插件
  虽然可以选择不安装,但是为了试验,我们还是选择了默认的安装,待安装完毕,我们来看看这些附加软件是否会出现在我们的真实系统当中。
  安装完毕后关闭沙盘,在真实系统中没有发现三个捆绑软件的任何踪影。

图16 关闭沙盘后IceSword的抓图
  这样安装的软件如果你想使用它,在真实系统的中是找不到快捷方式的,如何运行我们在后边详细讲述。

  其它的一些试验
  在Sandboxie的沙盘中打开ie,并下载了一个软件存放于d盘。然后关闭该沙盘。结果为:该文件在d盘中没有找到。

  在sandbox中的沙盘中打开注册表编辑器regedit,然后在某一注册表项里手工建新项。然后关闭该虚拟运行的注册表编辑器,接着关闭该沙盘。结果:使用真实的注册表编辑器查看,没有发现该新建项
三、其它的一些功能
  右键单击Sandboxie在任务栏的图标,在弹出的菜单栏里

图17 右键菜单
  3.1  switch to Sandbox(快速切换沙盘)
  如果你建立了多个沙盘,可以通过这里切换
  3.2  run Sandboxed (在沙盘中运行程序)

  ◆ Internet Explorer:在沙盘中开启ie。
  ◆ Default Browser:在沙盘中开启默认浏览器。比如你的默认浏览器为遨游,就可以通过它来开启。
  ◆ Email Reader:在沙盘中开启默认电子邮件软件。
  ◆ any Program:在沙盘中开启任意程序。
  ◆ from Start Menu:在沙盘中开启虚拟开始菜单、桌面、任意目录下的程序(这里指的是沙盘中的开始菜单、桌面、任意目录下,比如你刚刚在沙盘中安装完的软件在真实系统的开始菜单中是无法找到的,但是可以在沙盘的开始菜单中找到。
  ◆ Windows Installer Service:某些安装程序需要用到它,可以快捷在通过这里在沙盘中开启Windows Installer服务。

  3.3  Contents of Sandbox (沙盘目录)

  Sandboxie在虚拟的时候会在真实系统中的一个文件夹里生成对应的目录来临时存放沙盘里生成的文件和文件夹。所以当你在沙盘中浏览某带毒网页的时候,发现真实系统中的杀毒软件报警的话别担心,因为是检测到了沙盘Sandboxie生成的临时文件里边带有病毒,而该病毒只在沙盘中激活了,在真实系统中它只是一个文件而没有被激活。所以请放心。

  ◆ Explore Contents:这里可以浏览Sandboxie依照目录生成的临时文件。其中 drive目录代表的是沙盘中虚拟驱动器生成的临时文件夹及桌面上的文件。User目录代表沙盘中虚拟的一些系统文件夹。比如你保存在沙盘中的d盘里的东西在真实系统的d盘是无法找到的,但在这里就能找到它(前提是你没删除这个沙盘的内容)

  ◆ recover files:恢复文件。比如你在沙盘系统中下载了某个软件,现在想把它保存到真实系统中来就可以用这个功能来实现。(前提是你没删除这个沙盘的内容)

  ◆ delete contents:删除沙盘中的所有内容
3.4  Terminate Sandboxed Processes (终止沙盘)

  ◆ In Current sandbox(终止当前沙盘)
  ◆ In All Sandboxes(终止所有沙盘系统)
  3.5  temporarily disable forced  Program (临时允许某程序不运行在沙盘中)

  你可以在全局设置中设置某一软件的运行状态始终默认为在沙盘中运行。而这个选项就是让你临时允许该程序以正常模式运行。
  在Sandboxie主界面的Configuration(配置选项中)

图18 配置选项
  3.6  Global setting(全局选项)

  ◆ Set Sandbox top-loevel folder:设置沙盘临时文件存放目录。
  ◆ set Program alerts: 设置某些程序不是运行在沙盘中时发出警告。需要注意的是这个选项需要注册版本才能使用。还有输入程序的时候必须带扩展名。比如 WinRAR.exe
3.7 Sandbox settings(沙盘设置)

  ◆ Set file copy options:当沙盘中的程序试图修改另一个文件时,比如用沙盘中的winrar解压某个文件,这时Sandboxie就会自动把该文件拷贝到临时目录中,并且修改的只是临时目录中的文件而不是真实系统中的文件。这里可以设置相关的文件复制选项,比如设置超过多大的文件就不运行复制。
  ◆ Set Forced programs:设置某些程序默认在沙盘中运行,这样就不用老是手动在沙盘中启动该程序了,可以通过直接运行,该程序就自动运行在了沙盘中了。需要注意的是这个选项需要注册版本才能使用。还有输入程序的时候必须带扩展名。比如 WinRAR.exe
  ◆ Se automatic clean-up options:是否在退出沙盘时自动清除沙盘中生成的文件
  ◆ Remove Sandbox:删除当前沙盘
  3.8 create new Sandbox  建立一个新沙盘
  在view→switch to Sandbox中可以快速切换各个沙盘
  好了 沙盘的简单介绍就到这里,利用Sandboxie能够更好的保护我们的系统不受病毒的侵害及安装试验软件的干扰,沙盘的更多用途等待你去探索。最后附上某汉化作者汉化的Sandboxie 原理图和 Sandboxie 用途举例。

图19 原理图

图20 用途举例
(转载自:http://dev.xdowns.com/) 

2014年8月17日星期日

携程网信用卡泄密问题

事情经过

2014年3月22日晚上6点多,乌云平台报告了携程平台支付日志泄漏问题,然后信息快速传播。晚上八点左右我就得到消息。
从描述中大致来看,应当是支付过程的各种信息都被打到了日志里面,然后日志泄漏了。
第二天,携程发表声明。简单归纳就是几点:
  1. 漏洞系调试所致。
  2. 受影响的用户为21-22日的用户,统计仅93人。
  3. 因漏洞引起损失,携程将全额赔付。
个人认为,携程的声明基本就是在推卸责任。

过程还原

漏洞细节虽然没有暴露,但是从透露出来的信息仍然可以拼凑出部分过程。
  1. 某个时间开始,携程的某个内部人员打开了线上系统的日志,用来做调试。不幸的是,日志里面包含了信用卡所有刷卡信息,而且日志可以被穷举下载。这个人是谁,什么时间开始,不知道。
  2. 22日,漏洞发现者(猪猪侠)发现了这个问题,并报告在了乌云上。
  3. 携程收到信息后,立刻关闭了调试模式。并且把系统日志拉出来看看,发现里面有一些人。于是携程就发表声明。

问题分析

在整个过程中,暴露出几个问题:
  1. 携程未必是故意记录CVV信息。但是根据携程可以让用户仅提供卡号后四位就可以完成刷卡来看,携程一定是记录某些信息的,但是未受到本次漏洞影响。
  2. 交易过程所交流的数据属于机密,到底是什么人有权限打开调试日志,又没有经过严格的访问控制?是主管级以上?还是普通员工?无论哪个级别都是严重的问题。如果是普通员工,说明携程对员工的管理不到位,权限分割控制不合理。任何恶意员工可以打开日志得到数据而主管无法察觉。如果是主管以上级别则更加糟糕。说明主管根本不懂技术,也不知道如何保护客户的安全。
  3. 时间是否仅限于21-22日?如果是的话,意味着仅仅2天就被攻击者找到了漏洞。如果是偶然的话也太快了,如果是必然的话,则代表携程内部其实还有其他问题。
  4. 两天的交易仅仅是93人?没有更多?为什么只是部分用户受影响?携程并没有披露更多细节。要么是这里仍旧隐藏着漏洞,要么是携程的危机公关不到家。

评论

为什么说携程的声明是推卸责任?
  1. 首先,对于受到影响的用户,只要能证明是携程的责任,无论携程是否发布声明,都可以打官司获得赔偿。携程的声明仅仅是表达了他必然受到的法律后果。如同驾驶员发表声明:“我喝醉后所撞伤的所有人,我将全额赔付其医疗费”一样,没有任何意义。而如果无法证明是携程的责任,携程当然不会管你。
  2. 携程是否隐瞒了更久以前服务器调试开启的事实?这并不好说。个人倾向于善意的揣测携程不会隐瞒,但是在行动上不妨恶意的揣测其实调试信息打开时间更长,受影响的人更多。
  3. 为什么只有93人受到影响,携程并没有公布。携程的事后分析,应当都是基于这个漏洞的特性“下载日志”而定的。其赔偿基线也是根据“下载日志就会有日志”而产生。但是是否有可能被擦脚印?或者内部人员打开日志然后关闭而逃过被抓?这些携程并不能回答。从问题分析2来看,这种可能并不能排除。而携程的声明并没有表示对这些情况负责(当然就算想要负责也无能为力)。
  4. 由于携程信息的不透明,其声明“只有93人受到影响,其他用户安全不受影响”,换个说法就是,“不接受任何赔偿请求,除非你们有足够证据”。问题是用户怎么可能有证据?证据都在携程的服务器上和拿到信息者手里。当有用户的信用卡被盗刷,如何确认是自己的责任还是携程的责任?
基于上述几点,我认为携程的声明是在推卸责任。

建议

如果你是93人之一,当然,携程应该已经联系你换卡了。
如果你不是93人之一,根据上文分析,携程是不会理你的。基于携程并没有透露更多的信息,也没有第三方机构佐证其说法的事实。你需要自行考量信用卡信息泄漏的风险。因此,我对所有在三年以内在携程使用过信用卡的所有用户的建议是,立刻用各种方法冻结信用卡或额度,并尽快换卡
我对所有人将来的建议是,远离携程直到其展现出对用户隐私和安全足够的尊重,或者关门。
PS,你可以用下面几种方法冻结信用卡:
  1. 打电话给发卡行,要求冻结。发卡行核对一些基本信息后就会帮你冻结。
  2. 使用网银将额度改为1元。根据网友反馈,建行的额度是千元为单位设定的,建议建行的用户们尽快弃卡。

信用卡的固有弱点

信用卡消费的几个要素是,卡号,CVV号,还有有效期。如果是线下消费,需要核对签名(理论上如此)。如果有设定密码,需要核对密码。
密码的问题是,如果设定了密码,一旦信用卡被盗刷,而密码一次正确,将被视为用户责任。而且很多发卡行的跨境消费是设定了密码但是没有密码也能成功的。因此信用卡的建议是不打开密码。
在网络使用中,这里有个很严重的不便——卡号,CVV,有效期,都是发行时即固定,不可更换。这导致一旦你将这些信息交给对方,你的安全就全由对方保护,发卡行无法帮你做任何事情。
正常来说,应当使用密码乃至在信用卡上附上电子token来加强安全性需求。这样的话,token信息无法保存,密码可以修改。当出现携程这类问题时(或者更普遍的,当碰到有恶意的商家时),可以通过修改密码来解决问题,不需要换卡。

一个小故事——我和携程打交到的经历,还有我为什么幸运的逃过一劫

我在某年,使用携程订机票的时候,对方业务员让我报出身份证号。我当时就一阵错愕——难道身份证号不是应当使用手机键盘输入么?
两者的区别在于,手机键盘输入,信息是直接输入到VI系统的电脑中,业务员只能看到尾号。而如果是业务员输入,那么他就有我的所有信息——从身份证号到信用卡号。也许我可以相信携程,但是我如何相信业务员?出了问题,我如何证明?
所以我就向携程的客户经理投诉了这个问题。具体经历在网络安全——你需要知道的东西里面已经描述了。这里面甚至我质疑了携程保存信用卡的安全性,几乎和今天的问题类似。
结果没多久,我打给携程的时候,丫的业务员和我说,如果你信不过我,咱们可以走这套系统。
我了个大去,这种系统还允许旁路绕过?那有个毛线的意义?
从此(12年年中吧)我再也没有用过携程的业务——用也是让公司同事帮我用。因此,当去年(13年某个时候)我的老卡到期,我就换用了新卡。新卡还没有在携程上用过。所以本次问题我一点事都没有。

2014年8月3日星期日

庖丁解牛 - 整体构成

fqrouter不认为有任何一个人可以一直与GFW对抗下去。但是想法却是永生的。fqrouter如果能传递一个想法,相信会和西厢计划鼓励了我写fqrouter一样,薪火相传下去。所以写一个能用的工具是不够的,工具总会有失去维护的那一天。把工具的构成原理,以及为什么设计成这样写下来,也是相同重要的事情。
那么先来了解一下fqrouter的整体构成吧。
整体构成
从最大的方面来说,fqrouter由fq和router两部分组成。第一部分解决可访问性问题,第二部分解决翻墙网络的共享问题。
可访问性部分又由DNS反劫持,代理,穿墙三部分组成。DNS反劫持是针对域名解析不正常问题的。穿墙是针对关键字检查导致TCP连接重置问题的。代理是用来解决IP被封锁问题的。可访问性可以理解为把fqrouter接入到了一个虚拟的自由网络里。
共享由无线中继与Pick & Play两部分组成。无线中继操纵无线芯片的驱动,启动无线网络共享翻墙网络。Pick & Play利用ARP协议,扫描局域网里的设备,并选择性劫持ta们的网络进出流量以经过fqrouter。
列表如下(点击链接进入系列子文章):
可访问性在有ROOT权限下,都是用iptables实现的接入。对于没有ROOT权限的手机,接入使用的是Android的VpnService API。无论用的是iptables还是VPN模式,真正的翻墙穿墙逻辑实现都是同一套的。
可访问性部分中DNS与穿墙都是不需要代理服务器的,实现方式也相对成熟了。但是可惜的是,仅仅依赖DNS与穿墙这两个模块是无法访问所有的网站的。所有IP被封了的网站都必须依赖代理才能访问。而且穿墙还需要ROOT权限,以及NFQUEUE的支持,有不少手机是用不了的。所以fqrouter目前的各种不稳定问题,都是由代理模块工作不正常引起的。代理模块目前支持goagent与http-connect两种代理,分别用来解决HTTP服务器的IP被封问题,以及HTTPS服务器的IP被封问题。所有的服务器均由网络搜集而来。无论是代理的数量,质量,以及冗余程度都不能达到稳定使用的要求。让翻墙网络稳定可靠,就必须扩展代理模块,支持更多的代理协议,并让用户配置自己私有的代理服务器。
fqrouter一直没有上架Play Store,也没有正式发布,都是因为代理这个部分还需要很多工作要做。fqrouter与其他工具的区别在于希望接入方式的多元化。这么设计的主要原因是:
  • 一站式解决方案:无论什么代理服务器,都可以利用fqrouter做翻墙网络共享
  • 尽可能不依赖代理服务器:DNS与穿墙都不依赖代理服务器
  • 尽可能使用免费的资源:免费意味着不稳定,多元化与冗余可以提高整体的稳定性
  • P2P:将来fqrouter的手机在无线网络联网的条件下要加入一个P2P网络。代理可能不仅仅是国外的服务器了,还可能是国内的运行了fqrouter的手机。
可以总结为,如果只是为了稳定翻墙,解决个人与team的上网需求,搞一个私有的服务器,跑一个代理服务器客户端就可以了。fqrouter的实现方式绝对overkill了。哪怕可以优化一下访问速度的问题,但是不值得这么大费周章。如果是为了给GFW找点小麻烦,DNS与穿墙模块也就够了,要是校长不管,我们就接着用好了。如果为了给GFW找大麻烦,那必须得P2P。fqrouter是朝着P2P去的,虽然还没有到那个地步。
另外一种说法是fqrouter是一个大杂烩。fine,它确实是一个大杂烩。如果我的目标是卖代理服务器,fqrouter肯定就只支持我自己发明的协议,会简单得多,然后还可以赚点钱。你们需要一个fqrouter,还是yet another vpn 奸商呢?
共享现在有很多种方式。手机所有内置的网络共享方式,都可以使用。只要把网络共享出去了,启动fqrouter,共享出去的网络也自动翻墙了。所以不是一定要用无线中继的,在3G网络下用系统自带的无线共享功能也是一样可以的。利用系统自带的功能,可以实现:
  • 3G上行,无线下行
  • 3G上行,蓝牙下行
  • 3G上行,USB下行
  • 无线上行,蓝牙下行
  • 无线上行,USB下行
像tpmini大眼睛这样的Android机顶盒,还可以实现:
  • 有线上行,无线下行
无线中继是一个非常有益的补充。其设计的使用场景是带着手机去办公室,手机连上了无线网,而且插着充电线。这个时候要打开笔记本开始办公了。然后手机运行fqrouter用无线中继功能共享出一个翻墙的无线网给笔记本使用。这就实现了
  • 无线上行,无线下行(无线中继)
但是受限于3G的流量费,USB/蓝牙的使用不方便,以及无线中继的硬件支持范围有限。Pick & Play就变得必要了。Pick & Play支持了
  • 无线上行,无线下行(无需硬件支持)
  • 无线上行,有线下行(无需硬件支持)
Pick & Play并不创建新的网络,而是附着在已有的局域网上,局域网可以是纯无线的,也可以是无线有线结合的组网方式。其好处是不需要硬件支持,坏处是使用不如无线中继来着自然。
目前共享部分已经相对成熟,需要改进的地方不是特别多了。