浅议google hacking、社工技巧、数据安全(3) -- 撞库研究、密码破解、社工库系列学习
作为撞库研究、密码破解、社工库的系统文章第三篇
本文皆在讨论一些google hacking、社工技巧、撞库攻击对数据安全的影响的基本知识。希望能对研究数据安全攻防领域的朋友有所帮助,同时能引发大家的共同讨论
在上一篇文章中我们学习了密码强度、密码破解、密码心理学的一些基本知识
http://www.cnblogs.com/LittleHann/p/3543681.html
本文主要分为3个部分:
1. 社工技巧
2. google hacking
3. 撞库对数据安全的影响
相关学习资料
http://www.cnseu.org/forum.php?mod=viewthread&tid=2142&extra=page%3D2
http://www.cnseu.org/forum.php?mod=viewthread&tid=4136&extra=page%3D2
http://www.cnseu.org/forum.php?mod=viewthread&tid=4135&extra=page%3D2
http://www.cnseu.org/forum.php?mod=viewthread&tid=2870&extra=page%3D3
http://pan.baidu.com/s/1mg4XUBI
http://lucky.anquanbao.com/reference.html
http://emuch.net/html/201201/3991360.html
http://www.codecho.com/check-your-password-leak-or-not/
http://www.safecn.net/test-password.html
http://baike.soso.com/v4196227.htm
http://www.baike.com/wiki/数据安全
http://www.zhihu.com/question/21562202
http://wenku.baidu.com/view/e153a0640b1c59eef8c7b483.html
http://www.ciotimes.com/safety/sjaq/83874.html
http://www.cnseu.org/minisgk/
http://www.dajudeng.com/d201208100de80c502bed5b9f3f90f1c99.html
http://www.freebuf.com/articles/others-articles/19306.html
http://www.exploit-db.com/google-dorks/
1. 社工技巧
谈到"社工",我个人觉得这本质上就是对人进行渗透,通过利用人的心理学特点、包括密码心理学,全方位地获取目标对象的各种可能获取到的信息,从而达到伪造目标对象的目的,继而非法获取目标对象的包括个人财产在内的隐私信息的渗透过程。
http://www.cnblogs.com/LittleHann/p/3541989.html
社工技术可以根据其借助的媒介大致分为两类: 1. 基于人—基于人的社会工程学攻击需要人与人的互动来接触到需要窃取到的信息 2. 基于计算机—基于计算机的社会工程学的攻击可以使用相关软件来获取所需要的信息
了解了社工的分类,接下来学习一下社工常常使用的技术
社工采用的技术 1. 直接索取 (Direct Approach) 1.1) 会忽悠: 当在网络上找不到我们想要的信息,我们可以设法靠近当事人,去获取黑客想要的信息直接向目标人员索取所需信息 2. 个人冒充 2.1) 重要人物冒充 — 假装是部门的高级主管,要求工作人员提供所需信息 2.2) 求助职员冒充 — 假装是需要帮助的职员,请求工作人员帮助解决网络问题,借以获得所需信息 2.3) 技术支持冒充 — 假装是正在处理网络问题的技术支持人员,要求获得所需信息以解决问题 3. 反向社会工程 (Reverse Social Engineering) 3.1) 定义: 迫使目标人员反过来向攻击者求助的手段 3.2) 步骤: 破坏 (Sabotage) — 对目标系统获得简单权限后,留下错误信息,使用户注意到信息,并尝试获得帮助 3.3) 推销 (Marketing) — 利用推销确保用户能够向攻击者求助,比如冒充是系统维护公司,或者在错误信息 里留下求助电话号码 3.4) 支持 (Support) — 攻击者帮助用户解决系统问题,在用户不察觉的情况下,并进一步获得所需信息 4. 邮件利用 4.1) 木马植入:在欺骗性信件内加入木马或病毒 4.2) 群发诱导:欺骗接收者将邮件群发给所有朋友和同事 5. 钓鱼技术 (Phishing) — 模仿合法站点的非法站点 5.1) 目的: 截获受害者输入的个人信息(比如密码) 5.2) 技术: 利用欺骗性的电子邮件或者跨站攻击诱导用户前往伪装站点 6. 域欺骗技术 (Pharming) 6.1) 定义: 域欺骗是钓鱼技术加 DNS 缓冲区毒害技术 (DNS caching poisoning) 6.2) 步骤: 6.2.1) 攻击 DNS 服务器,将合法 URL 解析成攻击者伪造的 IP 地址 6.2.2) 在伪造 IP 地址上利用伪造站点获得用户输入信息 7. 非交互式技术 7.1) 不通过和目标人员交互即可获得所需信息 7.2) 借助工具 7.2.1) 利用合法手段获得目标人员信息: 7.2.2) 垃圾搜寻 (dumpster diving) 7.2.3) 搜索引擎 7.3) 利用非法手段在薄弱站点获得安全站点的人员信息,一些安全站点的管理员会在一些非安全的论坛上留下自己的详细信息,这种旁站的信息获取: 7.3.1) 论坛用户挖掘 7.3.2) 合作公司渗透 7.4) 庞大的社工库资源 7.5) 足够了解互联网: 7.5.1) 什么网站能查到什么类型的信息(多角度收集信息的渠道) 7.5.2) 什么网站可以去破解密码 8. 多学科交叉技术: 8.1) 心理学技术:分析网管的心理以利用于获得信息 8.2) 常见配置疏漏:明文密码本地存储、便于管理简化登陆 8.3) 安全心理盲区: 8.3.1) 容易忽视本地和内网安全 8.3.2) 对安全技术 ( 比如防火墙、IDS检测系统、杀毒软件等)盲目信任 8.3.3) 信任过度传递 8.4) 组织行为学技术:分析目标组织的常见行为模式,为社会工程提供解决方案。
了解了一些社工的基本技术之后,我们接下来学习一下我们在社工中,可以遵循的一个大致的思路
可以看到,信息的广泛、有效收集对社工的成功概率的重要性,那么,我们在整个渗透的过程中,都应该怎样去有效地收集信息呢?
收集方法 1. 搜索引擎 1) 这些信息如果目标用户曾经在网上活动过,这些信息都会被搜索引擎检索到,留下记录,所以我们可以利用搜索引擎去获取这些信息 2) 招聘网站、微博、博客、人人、空间 3) 通过社工网站的域名商、IDC商进行社工 4) 通过收集信息,然后对指定网站进行申述,也是一种社工方法 2. 社工库 通过历次数据脱库事件泄漏出的社工库来查找这些信息 3. 递归社工 递归社工是我自己的说法,指的是社工应该是一个逐步深入的过程,往往一个信息的获取又可以促使下一个更加有价值的信息的获取,例如: 如果找到了密码这种"高价值信息",可以直接登录用户
在其他第三方网站的信息,这里就可以进行递归的社工,我们到达第三方网站后,又可以继续下一轮的信息获取,为下一步的继续渗透作准备 1) 因为不同的网站的主题都是不一样的,我们通过递归社工,将各个网站的信息进行互补,可以不断地获取到关于目标的各种类型的信息,例如: 1.1) 支付宝、12306、招聘网站(前程无忧、智联招聘)这类的网站中,身份证等信息一定是准确的 1.2) 京东、拍拍、淘宝这类的网站中,收货地址一定是准确的 1.3) 通过支付宝、等网站可以验证手机号等信息 1.4) 还可以通过一些验证身份信息的网站进行验证: http://idcard.911cha.com/ http://sfz.3145.com/?sfz=350702199107261334 http://dt.id5.cn/desktop/parse.do 2) 社工的时候不要一条道走到黑,应该发散思路,随时转换目标,从多个角度去收集目标的信息 3) 搜索的时候应该优先社工那些"信息集中中心",例如QQ邮箱、社区帐号、空间帐号。这些地方一旦你拿到了帐号密码,可以继续登录进去获取其他的大量相关信息,为下一步深入获取信息
做准备 4) 社工的时候应该针对社工的对象对针对性的攻击,例如: 3.1) 社工的对象喜欢购物: 到淘宝、支付宝上查看 3.2) 社工的对象喜欢玩游戏: 到一些主流游戏的防沉迷系统上查看 5) 通过社工网站的域名商、IDC商进行社工
2. google hacking
我们在学习社工技术的时候,谈到了"信息收集"是社工中最重要的一个环节,接下来,就要学习一种很强大的信息收集技术:google hacking。google hacking是一种收集信息的一个很强大的技术,它属于"基于计算机的社会工程学的攻击"的一种,本质上是依托于搜索引擎提供的一些"元数据描述语法"对目标对象进行有效描述,从而更快、更准确的收集和目标对象有关的信息
以下内容来自: google_hacking技术手册.pdf
http://pan.baidu.com/s/1jGKBdci
google搜索的黄金法则:
1. google查询是不区分大小写的 2. google通配符: 1) 在google的通配符中,星号(*)代表搜索"词组"中的一个"词"。注意和正则中的概念进行区分: 1.1) 正则规则 .: 匹配任何单个字符 *: 匹配0或多个字符 ?: 匹配0或1个字符 2) 在一个词的开始或者结尾使用星号和直接使用这个单词的效果相同 3. google中保留忽略查询关键字的权利(stop word) 强制google使用常见词汇的一种方法是把它们用引号引起来、或者在单词前面加上一个加号"+"(注意加号和单词之间不能有空格)。这样可将该查询作为一个短语提交,并且查询结果中包括短语 中的所有单词(不管这些单词是否是"停用词") 4. 32个单词的限制 google限制搜索关键字最多为32个单词
google基本搜索
1. 词组: 词组是由封装在双引号内的一组单词所组成的。当google遇到一个词组时,它会按照你提供的单词顺序对词组中的所有单词进行搜索 2. 布尔操作符、可视化分组技术(括号)、特殊字符(操作符缩写、通配符、占位符) 1) AND(可忽略,默认情况下google会逐一搜索单词组中的每个单词,等效于AND的效果): AND关键字对google来讲是多余的。默认情况下,google会自动搜索查询中的所有关键字 2) NOT(或者用减号"-"): 在查询结果中排除某些关键字 3) OR(或者用管道符号"|"): OR操作符可以使用管道符号"|"或者小写单词or来表示。 intext:password | passcode intext:username | userid | user filetype:csv 这个搜索字符串的意思是: 查找所有文档的文本中包含password或者passcode的页面。在那些页面中,只要求显示出那些包含username、userid或者user的页面。对于那些页面,只要求显示
CSV文件) 这是一种多层过滤的思想 从技术上来说,那些OR符号把查询分成各种可能的查询解释,而google采用从左到右的方式来进行读取 我们可以采用"可视化分组技术(括号)"来增加可读性 intext:(password | passcode) intext:(username | userid | user) filetype:csv 3. 搜索缩减技术 这是我们进行精确搜索(有效社工)的一个重要手段之一 4. 使用google URL 每一个google查询都可以用一个URL来指向搜索结果页面。google的搜索结果页面不是静态的。它们会在我们点击search(搜索)按钮或者打开一个链接到结果页面的URL时动态创建。 www.google.com.hk/search?q=LittleHann 1) URl语法(快捷方便)
google高级操作符
1. intitle intitle:Google 返回标题包含单词Google的页面 intitle:"index of" 返回标题包含词组"index of"的页面 intitle:"index of" private 返回标题包含词组"index of",且网页的任何地方(URL、标题、文本等)包含单词private的页面。要注意的是,intitle只对词组"index of"起作用,而不会影响单词private 思考: 1) intitle技术在我们搜索技术文章的时候可以让我们更快、更准确的找到我们想要的文章 2) 对黑客来说,和服务器banner信息相关的攻击情境如下: 2.1) 攻击者已经选定了目标而且也发现了目标服务器的版本信息,那么他可能就会去搜索针对该软件特定版本的漏洞利用程序exploit 2.2) 攻击者手上已经有一个"有效的"、"针对特定版本的网站服务器"的exploit,这个时候,它就会利用google来搜索那些能够使用该exploit的目标 (这个过程也叫批量扫描检测,这是最常见的场景) intitle:index.of "Apache/1.3.27 Server at"
2. inurl inurl: 在URL中查找文本 URL是统一资源定位符(Uniform Resource Locator)的缩写形式,即网址。 使用inurl有以下几点需要注意: 1) google不能有效地搜索URL的协议部分,例如http:// 2) 其次,URL中包含大量的特殊字符,而google也不能很好的处理 3) 也是最重要的一点,其他高级操作符(site、filetype)也能够在URL中的特殊的地方进行搜索,而这比直接使用inurl要好得多
思考:
1) 查找特定的文件
filetype:log inurl:ws_ftp.loh
filetype:log intitle:index.of "parent directory"
filetype:log username putty
3. site site: 把搜索精确到特定的站点 虽然从技术上来讲,服务器的地址(或者域名)是URL的一部分,但是我们可以使用site操作符来对它进行更好地搜索 site允许我们仅在某个特定的网站或者特定的域中搜索网页 google是"从右向左"读取服务器名的,即如果我们要查找www.blackhat.com,我们只需要一个site:blackhat.com即可 思考: 1) site和inurl技术可以被用来进行对一个网站的后台路径进行搜索
site:target.com inurl:logi
2) 一种搜索登录入口的方法是关注单词login(登录)。另一种方法是关注页面底部的copyright(版权)字样。
3) 大多数名气很大的入口都会在页面底部放置一个版权注意事项,我们可以把它和产品以及welcome(欢迎)组合在一起进行搜索
4. filetype filetype(与ext操作符等价): 搜索指定类型的文件 google不但能搜索网页,还能够搜索许多不同类型的文件,包括PDF(adobe portable document format adobe便携文档格式)和Microsoft office文档 可以通过google的filetype操作符搜索特定的文件扩展名来寻找特定类型的文件 思考: 1) 文件扩展名搜索技术可以帮助我们定位我们需要的站点程序(PHP站点、ASP站点)
filetype:asp inurl:id=1
2) 获取指定扩展名的文件,例如搜索一些含敏感信息的备份、临时文件
inurl:/docs/index filetype:bak
intitle:index.of index.php.bak
5. Link Link: 搜索与当前网页存在链接的网页 Link操作符可以用来搜索链接到其他页面的网页。Link操作符不需要搜索关键字,只需要一个URL或者服务器名作为参数即可 为了合理地使用link操作符,你必须提供一个完整的URL(包括协议、服务器、目录、以及文件)、或者一个部分URL(只包括协议和主机)、或者一个简单的服务器名 link:www.cnblogs.com
6. inanchor inanchor: 在链接文本中查找文本 这个操作符可以用来和link操作符相比较使用,因为它们都能够用来搜索链接。但是inanchor操作符搜索的是一个链接的文本表示,而不是实际的URL inanchor操作符搜索的是锚点,或者说是链接上显示的文本。 inanchor:LittleHann 思考: 1. 和site+inurl一样。site+inanchor也可以被用来进行后台路径的扫
7. cache cache: 显示网页的缓存版本 google保存了它所抓取到的网页的快照 cache:www.cnblogs.com/LittleHann 关于cache,有几点需要注意一下: 1. google的缓存 在浏览页面的缓存版本时,存在某种匿名隐藏的特征。即当你浏览网站的缓存版本时,目标网站甚至无法得到任何一个来自于你的数据包(因为我们本来就不是在访问那个网站,而只是在访问保存
在google上的这个网页的缓存版本) 这个特点可以带来一些安全问题: 1) 即使你的源文件已经不存在了,但是黑客依然可以获取到你的原始副本 2) 黑客可以不需要给你的目标服务器发送任何数据包就"抓取"你的整个网站 2. 值得注意的是 1) 即使我们在访问目标站点的缓存副本的时候,由于缓存页面会去引用原始站点的图片,而这个引用请求的HTTP->REFERENCE会带上这个缓存页面,这等于就在告诉目标站点你正在进行缓
存访问 2) 要规避这个问题,我们可以选择"只访问该站点的文本缓存版本"。这样就不会产生对原始站点的图片的引用,也就不会对原始站点产生有效访问了(即我们只与google服务器进行通信) site:freebuf.com http://www.google.com.hk/url?sa=t&rct=j&q=site%3Afreebuf.com&source=web&cd=1&cad=rja&ved=0CCUQFjAA&url=%68%74%74%70%3a%2f%2f%77%77%77%2e%66%72%65
%65%62%75%66%2e%63%6f%6d%2f&ei=J9X6Uo7mAoSgiQeo-4HAAg&usg=AFQjCNGAMMcYIXiZfVcnEU3W-Vzj4SWGzw&bvm=bv.61190604,d.aGc 在google URL的后面加上&strip=1,强制使用非外部引用的缓存版本 http://www.google.com.hk/url?sa=t&rct=j&q=site%3Afreebuf.com&source=web&cd=1&cad=rja&ved=0CCUQFjAA&url=%68%74%74%70%3a%2f%2f%77%77%77%2e%66%72%65
%65%62%75%66%2e%63%6f%6d%2f&ei=J9X6Uo7mAoSgiQeo-4HAAg&usg=AFQjCNGAMMcYIXiZfVcnEU3W-Vzj4SWGzw&bvm=bv.61190604,d.aGc&strip=1 3. 免费VPN站点 inrul:"nph-proxy.cgi" "Start browsing" http://www.atomintersoft.com/ http://www.samair.ru/
8. numrange numrange: 搜索数字 numrange需要两个参数(最小数、最大树) numrange:1-9999 1..9999
总结:
总结 1. intitle: 1) 在页面标题中查找字符串 2) 能够很好地和其他操作符混合使用 3) 擅长搜索网页、group、图片和新闻 2. inurl: 1) 在页面的URL中查找字符串 2) 能够很好地和其他操作符混合使用 3) 擅长搜索网页和图片 3. filetype: 1) 根据文件扩展名查找特定类型的文件 2) 等同于ext 3) 需要附加搜索关键字 4) 能够很好地和其他操作符混合使用 5) 擅长搜索网页和group 4. site: 1) 限定在某个特定的网站或者域搜索 2) 能够很好地和其他操作符混合使用 3) 可以单独使用 4) 擅长搜索网页、groups以及图片 5. link: 1) 搜索链接到一个网站或者URL的链接 2) 不能很好地和其他操作符或者关键字混合使用 3) 擅长搜索网页 6. inanchor: 1) 在链接的描述文本中查找文本 2) 能够很好地和其他操作符和搜索关键字混合使用 3) 擅长搜索网页、图片和新闻 7. daterange: 1) 查找子啊某以特定日期范围内索引的页面 2) 需要搜索关键字 3) 能够很好地和其他操作符和搜索关键字混合使用 4) 擅长搜索网页
更多的资料请参阅: 《google_hacking技术手册.pdf》,本文中对文章的内容进行了引用,在此感谢作者的分享
3. 撞库对数据安全的影响
了解了信息收集的利器: google hacking之后,我们来继续学习一下撞库的基本知识。
撞库:以大量的用户数据位基础,利用用户相同的注册习惯(相同的用户名和密码),尝试登陆其它的网站,他本质上一个密码破解技术。
在进行撞库测试的学习、以及撞库平台的搭建之前,我觉得我们应该先了解一下社工库和撞库测试的区别
"撞库测试"和"社工库"感觉还是有点区别的: 1. 社工库是 1:n 的关系,我们通过社工库的目的是利用一个点的信息去查一个面的信息,继续再通过面获得整体的信息,是一个逐步递归扩展的过程,而黑客在使用社工库的时候,往往提供的
是一个: 1) 曾用账号名、论坛帐号、...任意类型的帐号 2) 曾用邮箱 3) 曾用QQ 社工库查询系统通过这一个点的信息,去进行发散性的搜索,找出"所有"和这个点有关的相关信息,已达到信息扩散搜集的目的 2. 而"撞库测试"的着眼点不太一样 1) 撞库并不是看重能否搜集到尽可能多的数据 2) 撞库看重的是: 2.1) 待检测数据(常常是密码)本身的安全性 2.2) 本身的保密性 2.3) 这个保密性指的是这个库是否因为已经在之前的数据库泄漏事件中泄漏了,从而导致这个密码很容易被破解 2.4) 并不是指数据本身(常常是密码)的长度这种形式的强度,而是一种社工、撞库层面的强度 3) 撞库测试可以依托社工库为基础,对待检测的每条记录中的字段放到社工库中去碰撞 4) 所以在"撞库测试"中,所谓的"密码强度较低",指的以下这种情况 4.4) 用户的帐号在社工库中碰撞成功,可以得到密码 4.5) 用户的密码在社工库中碰撞成功,可以得到密码 5) 所以原则上,可以拿用户授权的每一条记录都到社工库中去碰撞一下,这样的话,就是在检测用户的数据有没有被社工的风险,本质上是在做社工风险检测 3. 而另一种思路是为用户提供"数据安全检测服务",即只去检测用户的密码字段是否在社工库中出现,是否存在密码外泄的风险
我们要做研究撞库测试,我觉得首先要明确我们的目标:
我们做的东西的目标应该是一个对抗性的,关键是要找到对抗点,即我们要思考一下问题 1) 数据安全的定义是什么 2) 黑客可以通过什么手段来威胁到用户的数据安全 3) 黑客会怎么利用脱库事件、撞库测试来达到获取非法信息,了解黑客使用的手段 4) 是否需要、以及怎么做密码强度的检测 5) 是否需要、以及怎么做数据泄漏的检测 6) 社工库对用户数据库数据安全的影响
我在(2)中也提到了"撞库在密码破解中的应用"
http://www.cnblogs.com/LittleHann/p/3543681.html
从本质上来说,历次用户信息泄漏事件,流出大大量数据库,经过黑客的处理(去重、格式化、hash化)之后,变成了一个个强大的"HASH字典"、"彩虹表",进而被利用进行所谓的撞库攻击。
以下是来自
86析与启示-启明星辰安星web安全运维团队.pdf
的研究报告,里面有一张图做的非常好,感谢作者的分享
简要回顾一下大范围密码泄漏事件的过程可以发现,从入侵者发起攻击,到获得经济效益,大致可以分为3个步骤:
1. 拖库,利用: 1) WEB漏洞 1.1) File Exporsure 1.2) LFI 1.3) 系统漏洞等漏洞 2) 直接利用Sql注入点 3) 利用目标系统漏洞获取Webshell 4) 旁注攻击: 通过同一台主机上的其他虚拟主机(旁站)来进行渗透。所以,要加固的不仅仅是主机上的某个网站,而是该主机上的所有开放站点 5) 内部人员安全意识薄弱 等手段,把目标系统的用户数据库导入或者下载到本地 2. 洗库: 对数据库进行层层利用,获取经济利益 1) 广告推销商对优质客户的需求 2) 垃圾邮件发送者对邮件列表的需求 3) 私家侦探对个人信息的需求 4) ... 3. 撞库: 以大量的用户数据为基础,利用用户相同的注册习惯(相同的用户名及密码),尝试登录其他目标网站 1) HASH高频表密码破解技术 2) 彩虹表密码破解技术 撞库的发动形式取决于黑客怎么利用获取到的社工库
撞库测试、预防的攻防点
1. 在信息安全领域,理论上没有百分之百的安全,所有的安全措施和防御手段,都是在不断增加黑客攻击难度和可利用的成本,我在文章(2)中提到了收支平衡的问题 2. 从攻防的角度来看,防御体系的建设就是不断弥补系统漏洞的短板 3. 对于网站的web安全系统建设,同样是在广泛被讨论的PDR 模型下,即: 1) 防护protection "事前"通过"web漏洞扫描器"进行的系统的漏洞评估并进行加固 2) 检测detection 通过部署NIPS或者WAF设备来实现"事中"的防御 3) 响应response 通过部署数据库审计设备来实现"事后"的检测与追踪 4. 一个好的安全规划一定要事先考虑到系统被攻克并出现数据泄露情况,也就是所谓的密码安全问题,考虑最坏的情况下如何保证数据的安全(这也是纵深防御的思想体现) 1) 在拥有海量数据的"彩虹表"和"Hash碰撞库"存在的情况下,传统的利用MD5,SHA1 或者几种HASH 算法的组合的加密思路已经无法有效的阻挡入侵者的脚步 2) 业内相对比较认可的一种做法是为每个用户的密码进行单独Hash+Salt(盐)运算。尽管这种做法具体到单条数据的加密强度没有实质性的增强,但从全库的宏观角度来看,就有可能会
超出他们可以忍受的时间成本极限,这样的系统也就大大的降低了对入侵者的吸引力
至此,关于社工、撞库的基本理论知识的学习和分享就到这里了,接下来的时间准备动手实践一下,学习一下社工库的搭建、撞库测试的实现,也希望如果有这方面经验的朋友能指点一二,不胜感激