Yakit&IRTeam
Yakit是基于yak语言开发的网络安全单兵工具,旨在打造一个覆盖渗透测试全流程的网络安全工具库。受限于Yak使用形式,用户必须学习 Yak 语言并同时具备对安全的一定理解。为了让 Yak 本身的安全能力更容易被大家接受和使用,为Yak编写了gRPC服务器,并使用这个服务器构建了一个客户端:Yakit,通过界面化GUI的形式。
IRTeam作为国内一支工业安全红队,主要致力于PLC/DCS工业控制系统的脆弱性研究和攻击链打造,此次受360漏洞云与Yakit联手活动邀请,针对Yakit单兵工具尝试把IRTeam现有成果中一款针对西门子S7-200 SMART的Payload移植到Yakit工具上。
系统结构和参数
1、一台西门子PLC(S7-200 SMART) IP:192.168.2.10/24
2、一台TPLINK二层交换机
3、一台安装Yakit的PC(Windows 10)IP:192.168.2.110/24
安装过程:
https://www.yaklang.io/products/quickstart
评测过程
PLC探测
1、进入Yakit工具后,选择“基础安全工具”中的“扫描端口/指纹”
2、在指纹IP扫描目标中填入被扫描PLC的IP,此评测中我直接输入PLC的IP。
3、在“扫描端口”里填入常用PLC开放的端口,例如 80/102/443/3389 等。
4、然后点击开始扫描。
可以看到上图192.168.2.10这个设备上端口的状态,只有102端口开放,其余都是关闭的。如果是多个IP地址,还可以在扫描结果页面直观看到所有资产开放的端口号。如下图:
但在工控指纹这部分,并没有集成ICS的NSE,也希望Yakit在指纹部分开放用自己挂载的NSE脚本,方便某些特殊领域的资产识别。
从上图也可以看到端口102开放,西门子的PLC常用端口是102,所以可以初步确定PLC的厂商。
开发IRTeam插件
进入插件仓库,移植一个西门子PLC的Payload到Yakit工具插件上,因为Yakit插件支持Yak语言(近似Golang语言),所以简单看了一下语法和API和参数声明和调用,都是比较简单的,另外对于TCP库封装可以说近乎疯狂的地步。
Yak模块名:IRTeam (这个是我们团队的名字,同时代表工业控制的意思)
描述:就是针对西门子S7-200 SMART此款PLC的运行和停止控制
参数:IP 就是PLC的IP地址(字符串类型),PORT就是PLC开放服务端口(INT类型),CMD就是你exploit时候的发出控制PLC命令(BOOL类型,TRUE就是运行,FALSE就是停止)
源码部分实现起来也是十分简单,首先通过cli.string等操作获取参数里的内容,然后通过TCP.connect连接PLC并且打开102端口,然后就是先发送2个西门子PLC自有的TASP握手包建立session,然后在判断CMD的数值后发送运行或者停止的Payload。具体结构见下图:
经过Yak源代码Payload编写后,选择保存插件。返回到插件仓库可以看到一个YAK的插件,上面写着IRTeam和这个插件的描述,在模块详情中还可以看到作者的名字以及关键字。
同时在参数上,修改为真实PLC的IP/端口和命令,然后选择“开始执行”,就可以看到西门子PLC的状态会根据你下发的控制命令而改变。如下图:
PoC视频:
EDN
感谢剑思庭大佬给我们写的投稿文章,大家感兴趣可以加大佬微信交流~
我们的投稿活动还在进行中,走过路过不要错过,参加即可获得精美小礼物,投稿还有稿费噢~进交流群和投稿添加以下微信即可。
投稿活动详情(Yakit联合HackingClub开启有奖征稿啦~)
官网教程:https://www.yaklang.io/products/intro
下载地址:https://github.com/yaklang/yakit
原文始发于微信公众号(IRT工业安全红队):基于Yakit平台开发IRTeam插件exploit 西门子PLC
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论