当前位置:首页 > 数码 > 分析与检测-基于SSH加密的HTTP隧道 (食品分析与检测)

分析与检测-基于SSH加密的HTTP隧道 (食品分析与检测)

admin6个月前 (05-12)数码24

简介

Chisel是一个基于HTTP实现的快速稳定的TCP/UDP隧道工具,并通过SSH加密保证通信安全。Chisel可以进行端口转发、反向端口转发以及SOCKS流量代理,使用Go语言编写,具备较好的跨平台特性。该工具的主要用于绕过防火墙,也可以用于向网络中提供安全终端节点。

原理分析

隧道的搭建需要客户端和服务端两端,客户端负责接收待转发的数据,解析后将数据利用ssh进行加密、封装成HTTP/WebSocekt(s)协议发送到服务端,服务端接收后解析成原始流量并转发。

WebSocket协议

WebSocket协议是Http协议的补充,相较于Http协议,WebSocekt实现了长连接、全双工通信通道,具有更高效的通信效率。chisel隧道中的WebSocket协议是基于.com/gorilla/websocket包实现的。

SSH加密

WebSocke连接建立后,chisel工具会在WebSocket信道内进行SSH加密协商,协商中SSH的版本信息为SSH-chisel-v3-server。

数据转发

SSH加密协商后,chisel客户端会持续监听,接收待转发流量,ssh加密后发送到服务端。目前该工具支持的转发协议包括:SOCKS、UDP、TCP。

检测方法

根据分析结果,我们通过利用主动探测、特征匹配、异常HTTP协议筛查、SSH指纹筛查等多种检测方法,实现了对chisel隧道的有效检测。

特征匹配

利用WebSocket协议升级和SSH加密协商中包含的chisel工具特征字符串进行检测。

异常HTTP协议筛查

Chisel隧道将攻击流量加密隐藏在HTTP协议中,但可能存在异常的HTTP协议行为。

SSH指纹筛查

Chisel工具中实现SSH协商是基于GO语言的默认库golang.org/x/crypto/ssh,这导致SSH协商产生的指纹为GO语言的默认指纹。 食品分析与检测

总结

利用chisel工具搭建HTTP隧道,攻击者可以将攻击流量加密隐藏在隧道之中,从而规避流量监测设备,大幅度降低被发现的可能性。安全人员需保持对此类工具的密切跟踪研究,持续更新和学习新的检测技术和工具,力争在这类隐蔽隧道流量检测方面做出突破。

如何突破防火墙进行内网的渗透测试

身处不同的渗透测试环境下就会有不同的渗透思路以及渗透的技术手段,今天我们将从攻与守两个不同的视角来了解渗透测试在不同处境下所使用的技术手段。 从攻方视角看渗透攻方既包括了潜在的黑客、入侵者,也包括了经过企业授权的安全专家。 在很多黑客的视角中,只要你投入了足够多的时间和耐心,那么这个世界上就没有不可能渗透的目标。 目前我们只从授权渗透的角度来讨论渗透测试的攻击路径及其可能采用的技术手段。 测试目标的不同,自然也导致了技术手段的不同,接下来我们将简单说明在不同的位置可能采用的技术手段。 内网测试内网测试指的是由渗透测试人员在内部网络发起的测试,这类的测试能够模拟企业内部违规操作者的行为。 它的最主要的“优势”就是绕过了防火墙的保护。 内部可能采用的主要渗透方式有:远程缓冲区溢出,口令猜测,以及B/S或C/S应用程序测试(如果在渗透测试中有涉及到C/S程序测试的,那么就需要提前准备相关客户端软件供测试使用)。 外网测试外网测试则恰恰与内网测试相反,在此类测试当中渗透测试人员完全处于外部网络(例如拨号、ADSL或外部光纤),来模拟对内部状态一无所知的外部攻击者的行为。 外部可能采用的渗透方式包括:对网络设备的远程攻击,口令管理安全性测试,防火墙规则试探、规避、Web及其它开放应用服务的安全性测试。 不同网段/Vlan之间的渗透这种渗透方式是从某内/外部网段,尝试对另一网段/Vlan来进行渗透。 这类测试通常可能用到的技术包括:对网络设备的远程攻击、对防火墙的远程攻击或规则探测、规避尝试。 信息的收集和分析伴随着渗透测试的每一个步骤,而每一个步骤又有三个部分组成:操作、响应和结果分析。 端口扫描通过对目标地址的TCP/UDP端口扫描,确定其所开放的服务的数量以及类型,这是所有渗透测试的基础。 端口扫描是计算机解密高手喜欢的一种方式。 通过端口扫描,可以大致确定一个系统的基本信息并搜集到很多关于目标主机的各种有用的信息,然后再结合安全工程师的相关经验就可以确定其可能存在的以及可能被利用的安全弱点,从而为进行深层次的渗透提供可靠性依据。 远程溢出这是当前出现的频率最高、威胁最严重,同时又是最容易实现的一种渗透方法,一个仅仅具有一般的基础性网络知识的入侵者就可以在相当短的时间内利用现成的工具实现远程溢出攻击。 对于防火墙内的系统同样存在这样的风险,只要对跨接防火墙内外的一台主机攻击成功,那么通过这台主机对防火墙内的主机进行攻击就易如反掌。 口令猜测口令猜测也是一种出现概率很高的风险,几乎不需要任何攻击工具,利用一个简单的暴力攻击程序和一个比较完善的字典,就可以进行猜测口令。 对一个系统账号的猜测通常包括两个方面:首先是对用户名的猜测,其次是对密码的猜测。 只要攻击者能猜测或者确定用户口令,就能获得机器或者网络的访问权,并且能够访问到用户能够访问的审核信息资源。 本地溢出所谓本地溢出是指在拥有了一个普通用户的账号之后,通过一段特殊的指令代码来获取管理员权限的方法。 使用本地溢出的前提是首先你要获得一个普通用户密码。 也就是说由于导致本地溢出的一个关键条件是设置不当的密码策略。 多年的实践证明,在经过前期的口令猜测阶段获取的普通账号登录系统之后,对系统实施本地溢出攻击,就能获取不进行主动安全防御的系统的控制管理权限。 脚本及应用测试Web脚本及应用测试专门针对Web及数据库服务器进行。 根据最新的技术统计表明,脚本安全弱点是当前Web系统尤其是存在动态内容的Web系统比较严重的安全弱点之一。 利用脚本相关弱点轻则可以获取系统其他目录的访问权限,重则将有可能取得系统的控制管理权限。 因此对于含有动态页面的Web、数据库等系统,Web脚本及应用测试将是渗透测试中必不可少的一个环节。 在Web脚本及应用测试中,可能需要检查的部份包括:(1)检查应用系统架构,防止用户绕过系统直接修改数据库; (2)检查身份认证模块,用以防止非法用户绕过身份认证;(3)检查数据库接口模块,用以防止用户获取系统权限;(4)检查文件接口模块,防止用户获取系统文件;(5)检查其他安全威胁。 无线测试虽然中国的无线网络还处于建设时期,但是无线网络的部署及其简易,所以在一些大城市里的普及率已经很高了。 在北京和上海的商务区内至少有80%的地方都可以找到接入点。 通过对无线网络的测试,可以判断企业局域网的安全性,这已经成为渗透测试中越来越重要的环节。 除了以上的测试手段以外,还有一些可能会在渗透测试过程中使用的技术,包括:社交工程学、拒绝服务攻击,以及中间人攻击。 从守方视角看渗透当具备渗透测试攻击经验的人们站到系统管理员的角度,要保障一个大网的安全时,我们会发现,关注点是完全不同的。 从攻方的视角看是“攻其一点,不及其余”,只要找到一个小漏洞,就有可能撕开整条战线;但如果你从守方的视角来看,就会发现往往是“千里之堤,毁于蚁穴”。 因此,必须要有好的理论指引,从技术到管理都要注重安全,才能使网络固若金汤。 渗透测试的必要性渗透测试利用网络安全扫描器、专用安全测试工具和富有经验的安全工程师的人工经验对网络中的核心服务及其重要的网络设备,包括服务器、网络设备、防火墙等进行非破坏性质的模拟黑客攻击,目的是侵入系统并获取机密信息并将入侵的过程和细节产生报告给用户,从而实现网络信息安全的防护。 渗透测试和工具扫描可以很好的互相补充。 工具扫描具有很好的效率和速度,但存在一定的误报率和漏报率,并且不能发现高层次的、复杂的、并且相互关联的安全问题;而渗透测试则需要投入大量的人力资源、并且对测试者的专业技能要求很高(渗透测试报告的价值直接依赖于测试者的专业技能水平),但是非常准确,可以发现逻辑性更强、更深层次的弱点,效果更加的明显。 一般的渗透测试流程如下:时间的选择为减少渗透测试对网络和主机的负面影响,渗透测试的时间尽量安排在业务量不大的时段或者是晚上。 策略的选择为了防止渗透测试造成网络和主机的业务中断的问题,在渗透测试的过程中尽量不使用含有拒绝服务的测试策略。 授权渗透测试的监测手段在评估过程中,由于渗透测试的特殊性,用户可以要求对整体测试流程进行实时的监控(PS:可能会提高渗透测试的成本)。 测试方自控由渗透测试方对本次测透测试过程中的三方面数据进行完整记录:操作、响应、分析,最终会形成完整有效的渗透测试报告并将其提交给用户。 用户监控用户监控一共有四种形式:全程监控:采用类似Ethereal的嗅探软件进行全程抓包嗅探;择要监控:对其扫描过程不进行录制,仅在安全工程师分析数据后,准备发起渗透前才开启软件进行嗅探;主机监控:仅监控受测主机的存活状态,用以避免意外情况发生;指定攻击源:用户指定由特定攻击源地址进行攻击,该源地址的主机由用户进行进程、网络连接、数据传输等多方面的监督控制。 (友情提示:文章中会出现与之前文章些许重复的情况,望各位亲包容,不过重复即是记忆。 大家要常驻米安网哦!)

openssh网络安全分析

SSH协议出现之前,在网络设备管理上广泛应用的一种方式是Telnet。 Telnet协议的优势在于通过它可以远程地登录到网络设备上,对网络设备进行配置,为网络管理员异地管理网络设备提供了极大的方便。 但是,Telnet协议存在三个致命的弱点: A、明文传输:数据传输采用明文方式,传输的数据没有任何机密性可言。 B、认证机制脆弱。 用户的认证信息在网络上以明文方式传输,很容易被窃听; Telnet 只支持传统的密码认证方式,很容易被攻击。 C、“伪服务器欺骗”:客户端无法真正识别服务器的身份,攻击者很容易进行“伪服务器欺骗”。 SSH协议正是为了克服Telnet协议存在的问题而诞生的。 D、数据传输过程被篡改,无法保证传输过程数据完整性 ssh如果解决上述几个安全问题?我们一个个来分析 通过 在 通信双方建立“加密通道”,保证传输的数据不被窃听。 并且需要有合适的手段保证通信双方秘钥的安全 所谓加密通道,是指发送方在发送数据前,使用加密密钥对数据进行加密,然后将 数据发送给对方;接收方接收到数据后,利用解密密钥从密文中获取明文。 加解密算法分为两类: 对称密钥算法:数据加密和解密时使用相同的密钥和相同的算法。 非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥, 一个是由用户秘密保存的私钥。 由于非对称密钥算法比较耗时,一般多用于数字签名以及身份认证。 SSH加密通道 上的数据加解密使用对称密钥算法,目前主要支持的算法有DES、3DES、AES 等,这些算法都可以有效地防止交互数据被窃听,而且由于采用了初始化向量保 护,可以防止类似于密码流复用等密码分析工具的攻击。 对称密钥算法要求解密密钥和加密密钥完全一致,才能顺利从密文中解密得到明 文。 因此,要建立加密通道,必须先在通信双方部署一致的加解密密钥。 部署加解 密密钥的方式有多种:手工配置和第三方机构分配等。 手工配置的方式扩展性差, 只适合一些小型的本地网络;使用第三方机构分配密钥的方式,需要额外的第三方 服务器,而且密钥在网络中传输容易被窃听。 SSH协议使用一种安全的方式在通信双方部署密钥:密钥交换算法。 利用密钥交换 算法可以在通信双方动态地产生密钥,这个密钥只能被通信的双方获得,任何第三 者都无法窃听,这就在源头上保证了加解密使用密钥的安全性,很好地解决了密钥 分发问题。 支持的数据加密算法有: 3des-cbc aes128-cbc aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr 默认使用的算法: , aes128-ctr,aes192-ctr,aes256-ctr, , 可以通过关键字 “ Ciphers”指定使用的算法,多个算法间,需要使用逗号相隔 有三种方式指定算法 方式一:Ciphers 关键字后接算法名称,比如:Ciphers aes256-ctr,aes192-ctr表示只使用 aes256-ctr,aes192-ctr两种算法 方式二:Ciphers 关键字后接算法名称,并且算法名称前带上“+”,表示在默认算法基础上,新增“+”后的算法 方式三:Ciphers 关键字后接算法名称,并且算法名称前带上“-”,表示在默认算法基础上,裁剪“-”后的算法 支持的密钥交换算法有: curve-sha256 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 默认使用的密钥交换算法有: curve-sha256,, ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group14-sha1 可以通过关键字 “KexAlgorithms”指定使用的算法,多个算法间,需要使用逗号相隔 有三种方式指定算法 方式一:KexAlgorithms关键字后接算法名称,比如:KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 表示只使用diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 两种算法 方式二:KexAlgorithms关键字后接算法名称,并且算法名称前带上“+”,表示在默认算法基础上,新增“+”后的算法 方式三:KexAlgorithms关键字后接算法名称,并且算法名称前带上“-”,表示在默认算法基础上,裁剪“-”后的算法 传统的方式,采用的是密码认证模式:用户在ssh客户端输入账号、密码,openssh完成对登录用户进行密码认证。 用户的身份信息等关键数据都保存在认证服务器上 由于密码认证方式的认证强度较弱,SSH协议引入了公钥认证方式。 目前,openssh 可以利用RSA和DSA两种非对称密钥算法实现公钥认证。 公钥认证的过程分为两个部分:: (1) 公钥验证:客户端首先将自己本地密钥对的公钥部分,按照字符串格式发送 到服务器。 服务器使用本地保存的客户端公钥,与报文中携带的客户端公钥 进行比较,验证客户端持有公钥的正确性。 (2) 数字签名验证:如果公钥验证成功,客户端继续使用自己本地密钥对的私钥 部分,对特定报文进行摘要运算,将所得的结果(即数字签名)发送给服务 器,向服务器证明自己的身份;服务器使用预先配置的该用户的公钥,对客 户端发送过来的数字签名进行验证。 公钥验证和数字签名验证中任何一个验证失败,都会导致本次公钥认证失败。 AuthenticationMethodsPubkeyAuthentication:是否使用公钥认证,默认为yes UsePAM:该关键字只有在移植版中支持,PAM为“可插拔认证模块”,用于 PubkeyAcceptedKeyTypes:公钥认证算法 , , , , , ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed,ssh-rsa公钥认证配置方法: 1. 首先,在客户端生成一个对钥: # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root//id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root//id_rsa. Your public key has been saved in /root//id_. The key fingerprint is: fa:49:6c:0a:90:0e:0f:57:2e:21:79:f6:65:7f:8d:42 这里我们用的是rsa算法,我们也可以使用dsa算法: ssh-keygen -t dsa 从上面可以看到,提示输入私钥的保护密码,我们也可以不选,直接ENTER就行了! 现在密钥已经生成: id_rsa(私钥) id_(公钥) 如果是dsa算法生成的话: id_dsa id_ 2. 我们将公钥传到服务器的目录下. scp id_ user@hostname:/home/user//authorized_keys 3. 将/etc/ssh/sshd_config 中的rsa认证功能打开.(去掉注释) RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile /authorized_keys 然后重新启动sshd就行了. 如果是dsa算法的话同理. 疑问:公钥认证,是否使用了PAM?还是openssh自己搞的?可插拔认证模块的介绍:ChrootDirectory: Specifies 2.3.1 原理 用户认证机制只实现了服务器端对客户端的认证,而客户端无法认证服务器端,因 此存在着“伪服务器欺骗”的安全隐患。 图4 伪服务器欺骗 如图4所示,当客户端主机需要与服务器建立连接时,第三方攻击者冒充真正的服 务器,与客户端进行数据交互,窃取客户端主机的安全信息,并利用这些信息去登 录真正的服务器,获取服务器资源,或对服务器进行攻击。 为了防止类似这样的伪服务器欺骗,SSH协议支持客户端对服务器端进行认证。 服 务器端在密钥交换阶段,使用自己的私钥对一段固定格式的数据进行数字签名,并 将该签名发往客户端,客户端使用本地保存的服务器公钥,对签名进行鉴别,从而 达到认证服务器的目的。 HostKey HostKeyAlgorithms , , , , , ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed,ssh-rsa Macs 支持的消息认证码(Mac)算法有: hmac-md5 hmac-md5-96 hmac-sha1hmac-sha1-96 hmac-sha2-256 hmac-sha2-512 默认使用的密钥交换算法有: ,, ,, , ,, hmac-sha2-256,hmac-sha2-512,hmac-sha1 可以通过关键字 “Macs ”指定使用的算法,多个算法间,需要使用逗号相隔 有三种方式指定算法 方式一:Macs关键字后接算法名称,比如:KexAlgorithms hmac-sha2-256,hmac-sha2-512 表示只使用hmac-sha2-256,hmac-sha2-512 两种算法 方式二:Macs关键字后接算法名称,并且算法名称前带上“+”,表示在默认算法基础上,新增“+”后的算法 方式三:Macs关键字后接算法名称,并且算法名称前带上“-”,表示在默认算法基础上,裁剪“-”后的算法 openssh通过 以下4类算法,保证传输过程网络安全: A、传输数据加密:传输加密算法,密钥协商算法, B、公钥认证算法 C、Mac算法

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: SSH加密