conpot_usage简要说明

  conpot是一个ICS(工业控制系统)蜜罐, 旨在收集攻击者针对工业控制系统的攻击方法和动机. 这篇文章主要用来说明conpot的用户定制相关的一些配置. (英文原文详见: https://github.com/mushorg/conpot/blob/master/docs/source/usage/usage.rst)

  conpot附带了一个默认的配置文件, 它可以实现对安装有基本扩展模块的西门子S7-200 PLC的仿真. 这个默认仿真的攻击面包括: MODBUS, HTTP, SNMP and s7comm. 为了避免混乱, conpot的大部分配置是在XML文件中, 也有一些是保存在不同文件夹的templates文件夹下.

MOSBUS

配置文件的 <device_info /> 部分允许用户定义设备的信息并可以作为函数调用返回.  <slave /> 部分允许用户将每个从设备(slave)都定义在一个 <blocks /> 中. 二进制输出块: COILS  , 二进制输入块:  DISCRETE_INPUTS , 用户只需定义它们的起始地址和数据规模.  ANALOG_INPUTS 以字节为单位保存数据.

 1 <block name="a">
 2     <!-- COILS/DISCRETE_OUTPUTS aka. binary output, power on/power off
 3          Here we map modbus addresses 1 to 127 to S7-200 PLC Addresses Q0.0 to Q15.7 -->
 4     <type>COILS</type>
 5     <starting_address>1</starting_address>
 6     <size>128</size>
 7     <values>
 8         <value>
 9             <address>1</address>
10             <!-- Will be parsed with eval() -->
11             <content>[random.randint(0,1) for b in range(0,128)]</content>
12         </value>
13     </values>
14 </block>

如上边代码段中所示, 在 <values />  部分用户可以设置起始地址和内容部分, 由于内容部分的值都是预测的所以用户可以将其设置为随机值. 保持寄存器 HOLDING_REGISTERS 可以被看作一个临时数据存储区, 同样可以通过起始地址和数据规模来定义它, 而且保持寄存器不需要赋予初始值.

SNMP

在配置文件的 <snmp /> 部分, 你可以用 <symbol> 和一个name属性定义一个信息管理库(MIB) .

1 <symbol name="sysDescr">
2     <value>Siemens, SIMATIC, S7-200</value>
3 </symbol>

在conpot中包含信息库的流程如下所示:   (例如, 从IF-MIB中引入ifNumber)

1. 下载IF-MIB和IANAifType-MIB (IF-MIB的依赖包);

1 wget http://www.iana.org/assignments/ianaiftype-mib/ianaiftype-mib
2 wget ftp://ftp.cisco.com/pub/mibs/v2/IF-MIB.my

2. Conpot会自动编译MIB文件, 但需要使用 ‘-a‘ 参数指定存放MIB文件夹的路径;

1 sudo conpot -t my_custom_template.xml -a /opt/mymibs

3. 在MIB配置文件模板中加入用户自定义的snmp配置.

1 <mib name="IF-MIB">
2     <symbol name="ifNumber">
3         <value>2</value>
4     </symbol>
5 </mib>

HTTP

在配置文件的 <http> 部分, 用户可以配置conpot的web server的特性, 以及用相应的header和behaviour来控制每个网页和资源的访问特性. 还可以控制相应的错误代码和错误页面的传输方式以及何时传输.

全局 http 的配置:

 1 <global>
 2     <config>
 3         <!-- what protocol shall we use by default? -->
 4         <entity name="protocol_version">HTTP/1.1</entity>
 5         <!-- if we find any date header to be delivered, should we update it to a real value? -->
 6         <entity name="update_header_date">true</entity>
 7         <!-- should we disable the HTTP HEAD method? -->
 8         <entity name="disable_method_head">false</entity>
 9         <!-- should we disable the HTTP TRACE method? -->
10         <entity name="disable_method_trace">false</entity>
11         <!-- should we disable the HTTP OPTIONS method? -->
12         <entity name="disable_method_options">false</entity>
13         <!-- TARPIT: how much latency should we introduce to any response by default? -->
14         <entity name="tarpit">0</entity>
15     </config>
16
17     <!-- these headers will be sent with each response -->
18     <headers>
19         <!-- this date header will be updated, if enabled above -->
20         <entity name="Date">Sat, 28 Apr 1984 07:30:00 GMT</entity>
21     </headers>
22 </global>

如上所示, 从注释中可以很清楚的理解每条xml配置语句的作用:

  • disable_method : 失能对应条目代表的特性;
  • headers : globle部分的headers会被加载到被传递的每个页面上, 它可以被每个页面定义的具有相同名字的headers重写;
  • tarpit : 限制页面的传输速度; 这样做是为了模拟那些较慢的设备, tarpit的值是以秒和毫秒指定的;

  我们还通过引入别名(alias)的方式来增加配置的灵活性.  使用别名非常方便, 用户可以通过指定别名来代表其它已经配置好的资源, 从而使conpot执行响应的操作而无需重新定义所有配置项.

1 <node name="/index.htm">
2     <!-- this node will inherit the payload from the referenced alias node without telling the browser -->
3     <alias>/index.html</alias>
4 </node>

以上的配置通过别名的方式使浏览器对 ‘ /index.htm ‘ 的http请求全部以已经定义好的 ‘ /index.html ‘ 来进行响应. 并且浏览器不会察觉到这些内部的转换, 因为这些内部的转换都是由conpot单独完成的. 需要注意的是只有单层的alias可以被处理.

动态页面的传输通常是采用块传输编码的方式,  <chunks> 指令使能块传输编码, 并且分多个部分来传输一整个个大的数据流. 如下边的配置就是把一个页面分成4个块来传送, 分别是130, 15, 30和110字节. 如果用户配置的传输块的总字节数少于要传输的页面的字节数, conpot会在传输块的末尾自动追加一个包含所有缺失信息的块来完成整个请求. 这些块是按顺序传输的, 并且不会有trapit作用在传输的过程中.

1 <node name="/some_chunked_file.html">
2     <!-- this feature controls chunked transfer encoding -->
3     <chunks>130,15,30,110</chunks>
4 </node>

  

如下配置文件所示, 指向页面 ‘ / ‘ 的请求将会被重定向到另一个webserver. conpot向这个webserver发出一个请求, 就像后台代理一样, conpot会代表实际产生响应内容的服务器向请求客户端发送响应结果页面, 所以web浏览器将不会察觉到任何异常.

1 <node name="/redirected-page">
2     <!-- this page is redirected to another web server -->
3     <proxy>10.0.0.100</proxy>
4 </node>

这个特性页可以被应用到状态码. 例如代理重定向被应用到状态码404, 那么所有不能被conpot本身进行处理的请求都会被秘密地转发到另一系统,这个系统可以是一个真实的高交互设备. 如果只有404状态码被配置, 会导致所有的请求都会被转发到其它的webserver. 这样conpot就像是用于HTTP协议的更高交互的terminating honeywall.

 

IANAifType-MIB

时间: 2024-10-29 04:36:41

conpot_usage简要说明的相关文章

linux命令格式,获取帮助及其目录结构简要理解

我们都知道,一台计算机要是没通电,和一堆废铁没什么区别.那么,通电开机进入系统后,会进入交互界面,等待用户操作,人与计算机交互界面有两种: GUI:图形用户接口.如我们平时使用的Windows  ,linux的X window,有KDE和GOME. CLI:命令行接口,使用的SHELL类型有bash ,csh,tcshell,zshell等. 例如:[[email protected] ~]# commandbin root:当前登录的用户名. dxlcentOS:当前主机的主机名.@是一个分隔

0-Android编译系统简要介绍和学习计划

Android编译系统简要介绍和学习计划 来源:http://blog.csdn.net/luoshengyang/article/details/18466779 导语: 在Android源码环境中,我们开发好一个模块后,再写一个Android.mk文件,就可通过m/mm/mmm/make等命令进行编译.此外,通过make命令还可制作各种系统镜像文件,例如system.img.boot.img和recovery.img等.这一切都得益于Android编译系统,它为我们处理了各种依赖关系,以及提

用自己的话简要阐述struts2的执行流程

Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件.核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制.业务控制器Action和业务逻辑组件是需要用户来自己实现的.用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用. 基本简要流程如下:1.客户端浏览器发出HTTP请求.2.根据web

《亿人帮》与《新米公益》竞品分析报告(简要版)

<亿人帮>与<新米公益>竞品分析报告(简要版) --白斌 [email protected] iOS. APP版本皆为最新版 2016.12.12 竞品选择:<新米公益> 理由:都是互联网+公益,项目模式相同,两款APP均在2015年第二季度上线,SWOT四方面两者几乎是同样的起点.下面从产品的五个层次对二者进行分析并提出建议 一.战略层: 1.产品比较 产品名称 志愿者参与方式 slogan <新米公益> 走路.早起.答题 不止更好的自己 <亿人帮&

markdown简要说明显示样式

markdown 什么是markdown: ????Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. ??Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格.脚注.内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook.Markdown增强版中比较有名的有Markdown Extra.MultiMarkdown. Maruku等

UIResponder简要

关于UIResponder,我这边就简要的说一下响应链,firstResponder 1.响应链: 在UIResponder中有一个非常重要的概念叫做Responder Chain,个人的理解是这是按照一定规则组织的响应.处理事件的一条链表.在了解UIResponder之前还得在了解一个概念Hit-Testing.在IOS中通常使用hit-testing去找到那个被触摸的视图.这个视图叫hit-test view,当IOS找到hit-test view后就把touch event交个那个视图来处

JavaScript权威设计--JavaScript函数(简要学习笔记十)

1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()". 2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一个变

Android内存泄露分析简要思路

工作中遇到挺多需要分析内存泄露问题的情况,现在大致简要写下思路,等之后时间相对比较充裕再进行补充. 1.明白内存泄露的判断依据? 个人总结为:持续增加,只增不减! 理解一下这8个字,配合几个命令和工具来确定一下你的应用是否存在内存泄露问题,这是很关键的,如果一开始就判断错误了,那么没有继续往下进行的理由. 命令如下: adb shell dumpsys meminfo 应用包名 [当然,比较粗略地话,可以用adb shell procrank] 这时候你可以看到一个内存使用情况表 而我们首先关注

内存溢出与内存泄漏的简要解析

我们在实际编程中经常会说到内存溢出和内存泄漏,特别对于C/C++程序来说(以下代码示例均为C/C++),因为这时我们会跟内存直接打交道.然而很多时候我们并不能完全搞明白这两个概念,有时甚至会将二者颠倒混淆. 其实从命名上也能明白内存溢出和内存泄漏的大概,举个可能并不恰当的例子.好比是往水缸里打水,本来这个缸只能装下5桶水,第5桶装完你还硬要装第6桶,缸里的水自然就溢出来了,此为“内存溢出”:缸里打满水后并没有人用,第二天发现缸里的水少了一半,第三天一滴不剩了,原来是缸底打了个洞忘补了(为什么要在