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 以字节为单位保存数据.
<block name="a">
<!-- COILS/DISCRETE_OUTPUTS aka. binary output, power on/power off
Here we map modbus addresses 1 to 127 to S7-200 PLC Addresses Q0.0 to Q15.7 -->
<type>COILS</type>
<starting_address>1</starting_address>
<size>128</size>
<values>
<value>
<address>1</address>
<!-- Will be parsed with eval() -->
<content>[random.randint(0,1) for b in range(0,128)]</content>
</value>
</values>
</block>
如上边代码段中所示, 在 <values /> 部分用户可以设置起始地址和内容部分, 由于内容部分的值都是预测的所以用户可以将其设置为随机值. 保持寄存器 HOLDING_REGISTERS 可以被看作一个临时数据存储区, 同样可以通过起始地址和数据规模来定义它, 而且保持寄存器不需要赋予初始值.
SNMP
在配置文件的 <snmp /> 部分, 你可以用 <symbol> 和一个name属性定义一个信息管理库(MIB) .
<symbol name="sysDescr">
<value>Siemens, SIMATIC, S7-200</value>
</symbol>
在conpot中包含信息库的流程如下所示: (例如, 从IF-MIB中引入ifNumber)
1. 下载IF-MIB和IANAifType-MIB (IF-MIB的依赖包);
wget http://www.iana.org/assignments/ianaiftype-mib/ianaiftype-mib
wget ftp://ftp.cisco.com/pub/mibs/v2/IF-MIB.my
2. Conpot会自动编译MIB文件, 但需要使用 '-a' 参数指定存放MIB文件夹的路径;
sudo conpot -t my_custom_template.xml -a /opt/mymibs
3. 在MIB配置文件模板中加入用户自定义的snmp配置.
<mib name="IF-MIB">
<symbol name="ifNumber">
<value>2</value>
</symbol>
</mib>
HTTP
在配置文件的 <http> 部分, 用户可以配置conpot的web server的特性, 以及用相应的header和behaviour来控制每个网页和资源的访问特性. 还可以控制相应的错误代码和错误页面的传输方式以及何时传输.
全局 http 的配置:
<global>
<config>
<!-- what protocol shall we use by default? -->
<entity name="protocol_version">HTTP/1.1</entity>
<!-- if we find any date header to be delivered, should we update it to a real value? -->
<entity name="update_header_date">true</entity>
<!-- should we disable the HTTP HEAD method? -->
<entity name="disable_method_head">false</entity>
<!-- should we disable the HTTP TRACE method? -->
<entity name="disable_method_trace">false</entity>
<!-- should we disable the HTTP OPTIONS method? -->
<entity name="disable_method_options">false</entity>
<!-- TARPIT: how much latency should we introduce to any response by default? -->
<entity name="tarpit">0</entity>
</config> <!-- these headers will be sent with each response -->
<headers>
<!-- this date header will be updated, if enabled above -->
<entity name="Date">Sat, 28 Apr 1984 07:30:00 GMT</entity>
</headers>
</global>
如上所示, 从注释中可以很清楚的理解每条xml配置语句的作用:
- disable_method : 失能对应条目代表的特性;
- headers : globle部分的headers会被加载到被传递的每个页面上, 它可以被每个页面定义的具有相同名字的headers重写;
- tarpit : 限制页面的传输速度; 这样做是为了模拟那些较慢的设备, tarpit的值是以秒和毫秒指定的;
我们还通过引入别名(alias)的方式来增加配置的灵活性. 使用别名非常方便, 用户可以通过指定别名来代表其它已经配置好的资源, 从而使conpot执行响应的操作而无需重新定义所有配置项.
<node name="/index.htm">
<!-- this node will inherit the payload from the referenced alias node without telling the browser -->
<alias>/index.html</alias>
</node>
以上的配置通过别名的方式使浏览器对 ' /index.htm ' 的http请求全部以已经定义好的 ' /index.html ' 来进行响应. 并且浏览器不会察觉到这些内部的转换, 因为这些内部的转换都是由conpot单独完成的. 需要注意的是只有单层的alias可以被处理.
动态页面的传输通常是采用块传输编码的方式, <chunks> 指令使能块传输编码, 并且分多个部分来传输一整个个大的数据流. 如下边的配置就是把一个页面分成4个块来传送, 分别是130, 15, 30和110字节. 如果用户配置的传输块的总字节数少于要传输的页面的字节数, conpot会在传输块的末尾自动追加一个包含所有缺失信息的块来完成整个请求. 这些块是按顺序传输的, 并且不会有trapit作用在传输的过程中.
<node name="/some_chunked_file.html">
<!-- this feature controls chunked transfer encoding -->
<chunks>130,15,30,110</chunks>
</node>
如下配置文件所示, 指向页面 ' / ' 的请求将会被重定向到另一个webserver. conpot向这个webserver发出一个请求, 就像后台代理一样, conpot会代表实际产生响应内容的服务器向请求客户端发送响应结果页面, 所以web浏览器将不会察觉到任何异常.
<node name="/redirected-page">
<!-- this page is redirected to another web server -->
<proxy>10.0.0.100</proxy>
</node>
这个特性页可以被应用到状态码. 例如代理重定向被应用到状态码404, 那么所有不能被conpot本身进行处理的请求都会被秘密地转发到另一系统,这个系统可以是一个真实的高交互设备. 如果只有404状态码被配置, 会导致所有的请求都会被转发到其它的webserver. 这样conpot就像是用于HTTP协议的更高交互的terminating honeywall.
conpot_usage简要说明的更多相关文章
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
- [译]Angular2 和TypeScript -- 一次简要的预览
原文链接:https://www.infoq.com/articles/Angular2-TypeScript-High-Level-Overview 作者: Yakov Fain Posted o ...
- 内网劫持渗透新姿势:MITMf简要指南
声明:本文具有一定攻击性,仅作为技术交流和安全教学之用,不要用在除了搭建环境之外的环境. 0×01 题记 又是一年十月一,想到小伙伴们都纷纷出门旅游,皆有美酒佳人相伴,想到这里,不禁潸然泪下.子曰:& ...
- markdown简要说明显示样式
markdown 什么是markdown: Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown具有一系列 ...
- 简要介绍BASE64、MD5、SHA、HMAC几种方法。
加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了. 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. ...
- Java Reference简要概述
@(Java)[Reference] Java Reference简要概述 Reference对象封装了其它对象的引用,可以和普通的对象一样操作. Java提供了四种不同类型的引用,引用级别从高到低分 ...
- 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...
- maven命令参考简要
命令参考简要说明 mvn archetype:generate — 创建生成Tiny骨架工程 参数名 说明 groupId 用户项目的包目录,用户需要根据实际情况设置.比如com.abc artifa ...
随机推荐
- lwip:网络数据包读取和解析过程
1. 程序的某处(poll or interrupt)在有数据可读时调用ethernetif_input,该函数依次调用以下函数: 1.1 low_level_input(),将网络数据读入内存: 1 ...
- 激活Maven profile的几种方式
首先简单介绍下 Maven 的 profile 是什么.对于人来说,profile 是指人的肖像,轮廓,比如论坛里每个人注册了帐号后,可以设置自己的 profile,放上照片,介绍等等.对于 Mave ...
- Lvs+Keepalived+Squid+Nginx负载均衡
前言* 随着互联网IT行业的发展,越来越多的企业开始使用开源软件搭建自己的web架构,主流的LVS也得到了广泛的应用,在保证高可用的同时,用户对网站的体验速度也有了很高的要求,这时候需要我们在我们的架 ...
- WINDOWS黑客基础(5):利用内存来进行获取计算结果
在前面的注入代码的章节中,我们利用了VirtualAllocEx来在对方的进程开辟了一块内存,并且将代码复制进对方进程的内存里面,从而执行那段内存的代码,但是这里有一个问题,就是代码不是执行在我们进程 ...
- mongodb3.03开启认证
原文地址:http://21jhf.iteye.com/blog/2216103 下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如 ...
- C# is和as操作符
is和as操作符 is操作符:检查对象是否与给定类型兼容. 说明: 1.如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true, ...
- 一个Oracle触发器的示例
CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder for each row declare ...
- spark单机模式简单搭建
待安装列表hadoophivescalaspark一.环境变量配置:~/.bash_profilePATH=$PATH:$HOME/bin export PATH JAVA_HOME=/usr/loc ...
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)
转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...
- POJ 1061 青蛙的约会(扩展欧几里得)
根据题意,两个青蛙跳到同一个点上才算是遇到了,所以有 (x+m*t) - (y+n*t) = p * ll; (t是跳的次数,ll是a青蛙跳的圈数跟b青蛙的圈数之差.整个就是路程差等于纬度线周长的整 ...