momalab/ICSREF
GitHub: momalab/ICSREF
ICSREF 是一个自动化逆向工程框架,用于分析和理解 CODESYS 编译的工业控制系统二进制文件的结构、调用关系及 I/O 映射。
Stars: 184 | Forks: 50
## ICSREF:ICS 逆向工程框架
# 概述
``ICSREF`` 是一个模块化框架,可自动对使用 CODESYS v2 编译器编译的 CODESYS_ 二进制文件进行逆向工程。
.. code-block:: none
```
_______________ ____ ____________
/ _/ ____/ ___// __ \/ ____/ ____/
/ // / \__ \/ /_/ / __/ / /_
_/ // /___ ___/ / _, _/ /___/ __/
/___/\____//____/_/ |_/_____/_/
```
作者:Tasos Keliris `\@koukouviou`_
.. _`\@koukouviou`: https://www.twitter.com/koukouviou
# 引用我们!
如果您觉得我们的工作很有趣,并在您(学术或非学术)的研究中使用了它,请引用我们描述 ICSREF 的 NDSS'19 论文:
Anastasis Keliris 和 Michail Maniatakos,“ICSREF:一个用于工业控制系统二进制文件自动化逆向工程的框架”,发表于 NDSS'19。
Bibtex:
.. code-block:: none
```
@inproceedings{keliris2019icsref,
title={{ICSREF}: A Framework for Automated Reverse Engineering of Industrial Control Systems Binaries},
author={Keliris, A. and Maniatakos, M.},
booktitle={Network and Distributed System Security Symposium (NDSS)},
year={2019}
}
```
# 预览
.. raw:: html
```
```
# 分析
该框架可以:
* 对任意 ``PRG`` 程序执行核心分析。核心分析包括:
1. 划分二进制数据块(即函数/例程)。
2. 识别对动态库的调用。
3. 识别对静态库(同一二进制文件中的其他位置)的调用。
4. 在提供包含编译该二进制文件的特定设备的物理 I/O 内存映射的 TRG 文件的情况下,识别该二进制文件使用了多少以及哪些物理 I/O。
* 识别静态包含在二进制文件中的已知库函数:
1. 使用基于 opcode 的哈希匹配技术
2. 使用基于实验性的签名技术。目前这仅针对比例-积分-微分(PID)CODESYS 库函数实现。
* 提取传递给静态函数的参数。目前这仅针对 PID_FIXCYCLE CODESYS 库函数实现,但将其扩展到其他感兴趣的函数是非常简单的。
1. 参数提取由符号执行和 ``angr`` 驱动
2. 它可以处理参数不受 I/O 测量影响的情况(即全局定义或直接传递的参数)
* 绘制已分析二进制文件的 SVG 图表,包括:
1. 静态函数之间的调用
2. 对动态函数的调用
3. 指向 SVG 中每个函数的反汇编列表的超链接
图表由 Graphviz_ 驱动。这里有一个清晰的示例:
.. image:: docs/images/graph_hil.jpg
:width: 500pt
.. _CODESYS: https://www.codesys.com/
.. _Graphviz: https://graphviz.org/
该框架支持交互模式,在该模式下会加载所有的处理模块。用户可以通过探索不同的选项来进一步调查和分析他们的二进制文件。交互式环境还提供了有用的 `help` 文档字符串。
.. code-block:: none
```
(icsref) me@example:$ ./icsref.py
ICS Reverse Engineering Framework
_______________ ____ ____________
/ _/ ____/ ___// __ \/ ____/ ____/
/ // / \__ \/ /_/ / __/ / /_
_/ // /___ ___/ / _, _/ /___/ __/
/___/\____//____/_/ |_/_____/_/
author: Tasos Keliris (@koukouviou)
Type if you need a nudge
reversing@icsref:$
reversing@icsref:$ help
Documented commands (type help ):
========================================
__changepid changepid exp_pid_match history pyscript set
__replace_callname cleanup graphbuilder load quit shell
_relative_load cmdenvironment hashmatch pidargs run shortcuts
analyze edit help py save show
```
# 安装
有关最新的安装说明,请参阅 INSTALL.md_。有关旧版的安装说明,请参阅此处_。
.. _INSTALL.md: INSTALL.md
.. _here: INSTALL.rst
# 文档
``ICSREF`` API 的文档采用 *Read the Docs* 风格编写。下载代码库后,您可以浏览 docs 目录,并在您喜欢的浏览器中打开 index.html。
# 贡献者
非常感谢为这个项目做出贡献的每一个人。请参阅 CONTRIBUTORS_
.. _CONTRIBUTORS: CONTRIBUTORS
标签:PKINIT, 二进制分析, 云安全运维, 云资产清单, 工业控制系统, 工控安全, 自动化分析, 跨站脚本, 逆向工具, 逆向工程