从LinkedIn收集和构建用户信息
Justin Angel //
渗透测试和红队行动常需要从各种来源收集用户信息,这些信息可作为社交工程和密码攻击的输入。LinkedIn显然是这类信息的首选来源,因为用户可以将自己与特定公司关联。假设我们在前期侦察阶段已识别出目标组织拥有的公司,通常只需在LinkedIn找到公司页面并浏览"人员"部分即可枚举员工信息。
但出于以下(及其他)原因,这种方法效率不高:
- 大量重复劳动(除非使用@vysec开发的LinkedInt工具——本工具的关键灵感来源)
- LinkedIn根据多种变量限制账户可访问的目标资料信息,如当前所属行业和共享连接
- 根据目标公司安全意识培训的效果,员工可能将资料配置为在建立连接前隐藏个人信息
本文将讨论我的资料内容最大化获取策略,并演示如何快速将Peasant输出转化为可操作数据。
资料访问最大化策略
- 将个人资料配置为看似在目标公司任职(通常会解锁部分可连接资料)
- 从可访问资料中收割信息
- 若信息不足,复制高价值资料内容到自己的资料
目标是使你的资料对即将发送连接请求的账户具有吸引力。共享连接越多,可访问资料越多。建议选择目标组织所在行业的招聘专员资料进行伪装,完成后建议屏蔽被伪装的账户以避免异常。
自动化工具Peasant
手动执行此过程耗时费力,因此我开发了Peasant工具提供三种操作模式:
harvest_contacts
- 为给定公司标识符收割LinkedIn资料中的联系信息add_contacts
- 伪造目标用户资料的连接请求spoof_contact
- 伪装LinkedIn资料(将目标资料内容复制到自己的资料)
警告:LinkedIn API非常复杂,此工具可能会失败,特别是在伪装资料时。建议在伪装前清除当前资料所有内容。注意此操作可能导致账户被标记。
联系人收割技术
Peasant利用LinkedIn公司页面"人员"部分的动态加载API直接提取资料内容。注意事项:
- 使用Peasant收割不会触发资料访问通知
- LinkedIn每次查询可能返回不同结果,建议多次运行Peasant
- 使用
-ac
参数可在发现资料时自动生成连接请求(较激进) - 非高级账户有严格的API调用限制
连接请求伪造
收割获得的"entity URN"字段可用于向特定LinkedIn资料发送连接请求。Peasant可处理CSV文件并自定义请求消息。注意:
- 需对目标资料有足够访问权限
- LinkedIn对连接请求有宽松的API限制
资料伪装技术
Peasant可将外部资料内容(包括图片)更新到你的资料,这在社交工程中特别有用。注意事项:
- 需对目标资料有足够访问权限
- 可能触发目标资料的查看提醒(未确认)
- API调用复杂可能导致资料不完美,建议检查准确性
实战示例
以微软公司资料为例,使用零连接的新账户:
- 首先运行收割命令获取338个资料
- 伪装一个可查看的微软资料后,再次收割获得额外40个资料
- 使用
add_contacts
发送连接请求,一分钟后有人接受,最终获得1,842个账户信息
输出数据处理
Peasant生成的CSV包含多个有用字段:
- first_name
- last_name
- occupation
- public_identifier
- industry
- location
- entity_urn
- company_name
- company_id
- connection_requested
识别关键角色
使用awk可筛选安全相关职位(避免引起警觉):
|
|
构建密码喷洒攻击邮箱列表
使用Parsuite工具的templatizer模块可生成{名字首字母}{姓氏}@microsoft.com格式的邮箱列表:
|
|
构建钓鱼邮件内容
使用文本模板可生成含唯一链接的钓鱼邮件:
|
|
防御建议
- 安全意识培训应包含威胁分子使用社交媒体的钓鱼技术
- 创建多个LinkedIn账户加入公司资料,监控异常连接请求
- 发现恶意活动可向LinkedIn举报
漏洞发现
开发Peasant图片伪装功能时,发现LinkedIn存在此前未知的访问控制缺陷:删除伪装资料中的图片会导致原始资料的图片也被删除。此漏洞已通过LinkedIn安全团队在感恩节期间修复。