关于汤青松:高效率开发Web安全扫描器之路一

一、背景常常看到一些SRC和CNVD上厉害的大佬提交了很多的破绽,始终好奇它们怎么能挖到这么多破绽,开始还认为它们不下班除了睡觉就挖破绽,起初有机会意识了一些大佬,发现它们大部分破绽其实是通过工具开掘的,比如说上面是CNVD下面的白帽子大佬 我想成为大佬要怎么做 我始终感觉本人是一个有幻想的人,我也想有一天本人的ID能呈现在排行榜中,于是我凭借着本人那一点开发常识,认真钻研了一下市面上的平安工具,以及怎么开发平安工具。 平安工具剖析通过我得钻研发现市面上的平安工具其实只有两类,一类是面向某个破绽的工具比方SQLMap,另外一个一类是综合扫描工具,比方AWVS; 作为一个只想挖破绽的我,我更偏差于综合型的扫描器开发,可是综合型的扫描器开发难度真的很大,要清晰地理解各种破绽的原理,而且还须要把他们应用代码去实现,如果是我一个人从头开发我压根做不到啊。 但我并不打算放弃,我筹备集结天下之利器,为我扫描器所用;现实是有了,但事实是我要怎么实现,这可实在苦恼了我。 二、 要做的货色我想要做的扫描器外围目标就是要应用简略,另外就是我能够得心应手的批改;我心愿是我只有给他一个URL地址,它就能够帮我扫描网站的破绽,以及这个主机自身的破绽 粗疏的拆解了一下,我感觉最须要的性能有这几个 能主动收集URL地址,爬虫收集和爆破收集能从URL中提取主机IP能疾速检测常见的热门POC能自动识别网站的指纹信息能对IP进行端口疾速扫描能对端口的banner辨认出服务能检测出SQL注入破绽能检测出反射性XSS破绽可能通过指纹信息,应用对应的POC工具可能疾速扩大性能,且不影响整体逻辑第一版本差不多就是这些性能吧,性能尽管不算多,但如果齐全从头开始实现开发工夫可不少。 三、思路剖析为了达到高效率的同时又能自主可控,我决定做一个有程度的缝合侠,简略了解就是我要把很多工具奇妙的融入到我开发的工具来,这里须要思考的第一个问题是每个工具的应用办法、输出的参数、输入的后果都是不一样的,工具A的后果工具B不肯定意识。 要解决这个问题,说简略也简略说难也难,总之我是摸着石头过河胜利了;原理是本人给每个工具做一个壳,内部要调用工具A须要先调用工具A的壳,而后才会传到工具A,当工具A返回了后果,工具A的壳也会最先拿到,而后将后果解析进去并依照对立的格局输入就能够了。 通过这个简略的方法,我相当于把其余的平安工具变成了我得一个函数,我须要的时候调用这个函数就能够了。 依照我后面提到的需要,我梳理了一下要试用的工具有这几个: 序号 序号需要工具1.爬去URL的有RAD2.爆破URL的有DIRMAP3.提取主机IP正则4.疾速检测热门POCxray5.辨认网站的指纹dismap6.对IP端口疾速扫描masscan7.能对端口的banner辨认出服务nmap8.能检测出SQL注入破绽sqlmap9.能检测出反射性XSS破绽xsser这些工具都是比拟常见的工具,我第一步须要对他们的应用办法相熟,以xray工具为例 xray的应用命令如下所示 ./xray_linux_amd64 webscan --url "http://192.168.1.100/" --json-output /tmp/11.json当xray执行结束之后,他会将后果输入到指定地位,然而数据格式并不是我所冀望的,我须要将它的格局读入,而后再转换成我所须要的格局。 这里我用PHP写了一个简略的脚本,他做了这几件事件: 定义了参数起源地位和后果输入地位获取参数中的URL,并执行xray工具获取xray的执行后果,并解析成自定义格局将最终的后果写入到输入地位代码示例如下所示 <?php//获取输出的参数$inputFile = "/data/share/input_".getenv("xflow_node_id").".json";$outputFile = "/data/share/output_".getenv("xflow_node_id").".json";//没有input,间接返回if (!file_exists($inputFile)) { var_dump($outputFile, json_encode(['code' => 0, 'msg' => "{$inputFile}文件不存在", 'data' => []], JSON_UNESCAPED_UNICODE)); return 0;}//读取上游数据$inputData = json_decode(file_get_contents($inputFile), true);$url = $inputData['url'];$data = execTool($url);//将后果写入到指定地位,供蜻蜓平台导入数据file_put_contents($outputFile, json_encode($data, JSON_UNESCAPED_UNICODE));//将工具执行function execTool($url){ $hash = md5($url); $resultPath = "/tmp/{$hash}/tool.json"; //清理之上一轮的后果 if (file_exists($resultPath)) unlink($resultPath); //创立文件夹 if (!file_exists(dirname($resultPath))) { mkdir(dirname($resultPath), 0777, true); } $result = []; $toolPath = "/data/tools/xray"; if (!file_exists($toolPath)) die("xray 工具目录不存在:{$toolPath}"); $path = "cd $toolPath && "; // 通过系统命令执行工具 $cmd = "{$path} ./xray_linux_amd64 webscan --url \"{$url}\" --json-output {$resultPath}"; echo $cmd; exec($cmd, $result); $toolResult = file_exists($resultPath) ? file_get_contents($resultPath) : '[]'; $toolResult = json_decode($toolResult, true); print_r($toolResult); return $toolResult;}再来sqlmap封装的例子,首先须要晓得sqlmap的应用的办法,如下所示 ...

November 30, 2022 · 2 min · jiezi

关于汤青松:Rad爬虫结合W13Scan扫描器挖掘漏洞

一、背景这几天始终在钻研W13Scan破绽扫描器,因为对Python不是太相熟,所以进度有点慢,始终没看懂怎么将代理申请的数据转发到扫描队列中去,决定先相熟相熟这个性能再说;Rad爬虫最近比拟火,于是就是就抉择它了 W13scan 是基于Python3的一款开源的Web破绽发现工具,它反对被动扫描模式和被动扫描模式,能运行在Windows、Linux、Mac上。二、搭建靶场在扫描之前咱们须要筹备一个靶场零碎,这里我抉择的是permeate浸透测试零碎,搭建办法在之前的文章曾经写过了,这里就不再从新赘述,文章地址:https://segmentfault.com/a/11... ,这里有几条要害的命令 搭建一个Mysql数据库,执行命令如下 docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=123 -d -i -p 3309:3306 mysql:5.6搭建permeate,执行命令如下 docker run --name permeate_test --link mysqlserver:db -d -i -p 8888:80 daxia/websafe:latest启动nginx和php-fpm,执行命令如下 docker exec permeate_test zsh -c "php /root/start.php"下面的命令执行结束之后,咱们就能够拜访靶场零碎了,关上的网址为 http://youIp:8888/index.php应用浏览器拜访的界面如下图所示 在上图中能够看到曾经显示了区块和板块,阐明搭建胜利,如果没有显示区块,有可能是数据库地址填写的不对,认真看看装置文章就好了。 三、启动代理接下来咱们须要把W13Scan应用代理服务模式启动,启动的命令如下所示 python3 W13SCAN/w13scan.py -s 0.0.0.0:7777命令执行结束之后,命令窗口会返回如下图所示信息 在上图中咱们能够看到服务曾经启动了,并提醒扫描后果会寄存在当前目录下的./W13SCAN/output/12_03_2020/目录中,咱们暂且晓得有这样一个目录即可。 四、启动爬虫接下来我就须要将我的申请都转发到W13Scan破绽扫描器中,因为我是不晓得permeate浸透测试零碎有多少个页面的,而且人工去找速度慢不说,也不太事实; 为了疾速排查整个站点的平安状况,所以用上了RAD爬虫去抓取整个网站的链接,同时将他的代理地址设置W13Scan的代理服务地址,这样就相当于让让W13Scan扫描器去扫描了整个站点。 启动rad爬虫并设置代理地址的命令如下所示 .\rad_windows_amd64.exe -t http://192.168.152.135:8888/home/index.php --http-proxy 127.0.0.1:7777执行RAD爬虫命令之后,窗口返回的后果如下图所示 在命令执行窗口中咱们能够看到RAD爬虫曾经抓取到了局部的链接地址,阐明咱们的命令是正确的,晚一点再去./W13SCAN/output/12_03_2020/目录中查看扫描后果就好了 如果不想应用rad爬虫,也能够把浏览器的代理地址设置为127.0.0.1:7777,而后本人去点击一些页面,这样就能够对你正在浏览的网站进行安全漏洞扫描,这里我就不必浏览器演示了;五、查看后果扫描一段时间之后,在W13Scan扫描器的执行窗口中,我也看到扫描到安全漏洞的提醒,但比拟简要。 这里我间接去查看w13scan扫描器的扫描后果,关上扫描后果的执行文件如下所示 在上图中咱们能够看到,扫描到了9个破绽,别离有XSS、JS文件敏感内容匹配、.git泄露等类型。 有了这个W13Scan咱们很多时候能够躺着去挖洞了,^_^ 作者: 汤青松 日期:2020-12-04

December 4, 2020 · 1 min · jiezi

adobe-premiere中画面和声音不同步-解决方法

一、背景之前在segmentfault上过直播课,直播课有录制回播功能;尝试听了下直播课,发现视频太长了,感觉听起来非常花费学员的时间,在回放中其实有一些直播课里面的内容并不需要,所以准备剪辑一下,于是把视频下载了下来,花了些时间进行了剪辑,但剪辑完成之后发现声音和画面对应不上。 在网上找了很多解决方案,比如用Windows的premiere不行,换用mac版本的premiere;再比如把视频转换成mov的格式,网上各种方法试了一大堆,都没解决我的实际问题; 二、操作步骤前几天脑子突然想到一个解决方案,既然导致不同步的原因是可变速率问题,那么我先把视频里的声音导出并且设置为固定帧率,然后再放到视频里面是否可以呢?尝试之后发现是可行的,现在把方法介绍一下: 导出音频删除原视频声音导入新音频三、导出音频首先要做的是要把视频文件导出成固定速率的音频文件,这里我使用Adobe audition来处理,首先新建一个项目,然后将视频导入进来,接着将项目另存为mp3文件,如下图所示 在弹出来的确认框中,选择mp3格式,这样可以将音频文件大小降低,同时才会出现类型选项,如下图所示 接着在格式设置中,将类型选择为固定,这一步是最关键的一步,如下图所示 然后将mp3文件导出到你电脑的某一个位置。 四、删除原视频声音现在开始处理视频,笔者这里使用Adobe Premiere,同样首先新建一个项目,然后将视频文件拖进去,接着选中视频和声音,单击鼠标右键,选择取消链接选项,这样接下来就可以单独删除声音了 现在在单独选中声音,之后按下键盘的delete键就可以删除了声音部分 到此已经将视频的画面和声音分离出来了 五、导入新音频接下来要做的就是把处理好的mp3文件导入进来,可以直接mp3文件拖入到adobe premiere中来,如下图所示 然后再拖动右下方的进度条里面,把声音和画面对其,接着通过按住ctrl键把声音和画面部分同时选中,单击鼠标右键,在出现的菜单中,选择链接,如下图所示 完成上述操作之后,便已经解决了此问题,接下来你可以剪辑然后再导出视频进行一些尝试,可以看到原来因为剪辑后声音和画面不同步的问题此时已经解决啦~ 作者:汤青松 微信:songboy8888 更新日期:2019-07-04

July 4, 2019 · 1 min · jiezi

使用VMware安装Permeate靶场系统实践

一、背景不定时会做一些内训,会经常用到实验坏境;一开始搭建了一个docker容器,但考虑到不是所有学员都会使用docker,因此做了一个虚拟机版本,其实就是虚拟机里面安装了docker,为了方便大家迅速搭建坏境,总结了此文档给需要的学员; 二、操作步骤安装VMware下载镜像启动容器验证服务三、安装VMware安装VMware的过程只需要会点击下一步下一步就行,这个过程不再过多叙述,安装启动时候会提示你激活,可以选择试用30天,也可以在网上找一个激活码。 VMware下载地址:https://download3.vmware.com/... 四、下载镜像链接: https://pan.baidu.com/s/1HUtlPP94T6i2zbn0T7veQA 提取码: 6h6v 下载镜像后需要解压到你的电脑中,然后使用VMware打开虚拟机功能,找到位置,然后启动此虚拟机,如果提示vmware workstations与device/credential不兼容,需要在控制面板-程序和功能里吧Hyper给关闭 参考教程:https://jingyan.baidu.com/art... 五、启动容器5.1 启动容器打开终端,切换到root账户,可以使用命令su ,会要求输入密码,密码是 wmmszg;接下来就可以启动容器了 启动MySQL服务命令如下: docker start mysqlserver启动permeate容器命令如下: docekr start permeate_test5.2 启动web服务接着启动容器里面的nginx和PHP,命令如下 docker exec permeate_test zsh -c "nginx && /usr/sbin/php-fpm7.2 -R"六、验证服务此时permeate系统已经安装完毕,可以通过浏览器访问URL地址:http://permeate.localhost进行验证,如果打开看到如下图所示则代表成功。 作者:汤青松微信:songboy8888更新日期:2019-05-06

May 6, 2019 · 1 min · jiezi

Web安全开发规范手册V1.0

一、背景团队最近频繁遭受网络攻击,引起了部门技术负责人的重视,笔者在团队中相对来说更懂安全,因此花了点时间编辑了一份安全开发自检清单,觉得应该也有不少读者有需要,所以将其分享出来。二、自检清单检查类型说明检查项输入验证概述任何来自客户端的数据,如URL和参数、HTTP头部、 Javascript戓其他嵌入代码提交的信息,都属于不可信数据。在应用外部边界或内部每个组件或功能边界,都将其当做潜在的恶意输入来校验 白名单不可信数据可以设定白名单校验的,应接受所有和白名单匹配的数据,并阻止其他数据 黑名单不可信数据中包含不良输入字符时,如空字节(%00)、换行符(%0d,%0a,r, n)、路径字符(../ 或 ..)等,建议直接阻止该数据,若需要接受该数据,则应做不同方式的净化处理 规范化不可信数据的净化和校验前翯进行规范化,如将目录遍历(./或)等相对路径转化成绝对路径URL解码等。 净化不可信数据需实施各种净化处理时,应彻底删除恶意字符,只留下已知安全的字符,或者在处理前对它们进行适当编码或"转义",如数据输出到应用页面时对其进行HTML编码可防止脚本攻击 合法性校验不可信数据的合法性校验包括:数据类型如字符.数字、日期等特征;数据范國;数据长度等 防范SQL注入不可信数据进入后端数据库操作前,建议使用正角的参数化查询来处理,避免出现SQL注入 文件校验不可信数据为解压缩的文件时,如果文件位于服务目录外或文件大小超过限制,应拒绝处理 访问控制不可信数据通过上述校验后,还应确认所提交的内容是否与用户的身份匹配,避免越权访问输出验证概述考虑目标编译器的安全性,对所有输出字符进行正确编码 编码场景不可信数据输出到前后端页面时,根据输出场景对其进行相关编码,如HTML实体编码、UR编码 净化场景针对操作系统命令、SQL和LDAP查询,净化所有输出的敏感信息,如银行卡、手机号、系统信息等身份验证概述所有对非公开的网页和资源的访问,必须在后端服务上执行标准的、通用的身份验证过程 提交凭证用户凭据必须经过加密且以POST方式提交,建议用HTPS协议来加密通道、认证服务端 错误提示安全地处理失败的身份校验,如使用"用户名或密码错误"来提示失败,防止泄露过多信息 异常处理登录入口应具有防止暴力或撞库猜解(利用已泄露的密码字典进行批量登录尝试)的措施,超过1次验证失败自动启用图灵测试,超过多次验证失败自动启用账户锁定机制限制其访问 二次验证在执行关键操作(如账户密码修改、资料更新、交易支付等)时,先启动图灵测试,再对用户身份进行二次验证。交易支付过程还应该形成完整的证据链,待交易数据应经过发起方数字签名 多因子验证高度敏感或核心的业务系统,建议使用多因子身份验证机制,如短信验证码、软硬件 Token等。短信验证验证码生成复杂度至少6位数字或字母,一次一用,建议有效期不超过180秒。 验证码限制前后端设置用户获取频率为60秒一次,建议每个用户每天获取的短信最多10条 安全提示增加安全提示:至少含本次操作的功能、验证码发送编号、是否是个人自己操作的风险等信息。 凭证校验禁止在响应中返回验证码,服务器端同时校验密码、短信验证码等凭证信息,防止出现多阶段认证绕过的漏洞。图灵测试验证码生成复杂度至少4位数字或字母,或者采用拼图等验证方式,一次一用,建议有效期不超过180秒 验证码使用建议从用户体验和安全角度出发,可设计为当用户输错1次密码后自动弹出验证码输入框验证 验证码校验禁止在响应中返回验证码,验证码校验应在服务端进行密码管理密码设置密码设置时,应该满足8位及以上长度,含大小写字母、数字及特殊字符等的要求。用户密码设置必须经过后端验,不允许设置不满定复杂度要求的感密码。 密码存储用户密码存储时,应采用哈希算法(如SHA1)计算用户密码和唯一随机盐值(Salt)的摘要值保存其摘要和Sat值,建议分开存储这两个值 密码修改用户修改密码时,修改操作需要通过手机号或者邮箱地均进行一次身份验证。密码变更时,应短信或者邮件通知如用户是否是本人操作,告知其安全风险 密码找回用户密码找回时,后端需要对注册手机号或邮箱进行二次验证,验证码和验证链接应发送至预先注册的地址,并设置有效期以防止暴力破解。密保问题,应当支持尽可能随机的问题提问。在多个验证操作中,要对各验证机制进行排序,以防出现跳过前面验证机制直接到最后步认证的安全风险 密码使用应用开发中禁止设置万能密码、硬编码明文的密 码、使用数据库管理员账户操作、不同用户公用账 户操作或者将密码输出到日志文件或者控制台.会话安全防止会话劫持在应用程序进行身份验证时,建议持续使用HTTPS连接,认证站点使用HTTPS协议。如果连接是从防止会话劫持HTTP跳转到HTTPS,需要重新生成会话标识符。禁止在HTTP和HTTPS之间来回转换,这可能会导致会话被劫持 会话标识符安全设置会话 Cookie时,正确设置" Httponly’属性(禁止程序加5脚本等读取 Cookie信息)" Secure’属性(禁Cookie安全设置止Cookie通过HTTP连接传递到服务器端进行验证);" Domain"属性(跨域访问时可指定的授权访问域名),“Path"属性(授权可访问的目录路径)。 Cookie安全设置会话标识符应放置在HTP或HTPS协议的头信息安全中,禁止以GET参数进行传递、在错误信息和日志中记录会话标识符 防止CSRF攻击服务器端执行了完整的会话管理机制,保证每个会防止CSRF话请求都执行了合法的身份验证和权限控制,防止攻击发生跨站点请求伪造(CSRF)漏洞。 会话有效期会话应在平衡风险和功能需求的基础上设置有效期。定期生成一个新的会话标识符并使上一个会话会话有效期标识符失效,这可以缓解那些因原会活标识符被盗而产生的会话劫持风险。 会话注销注销功能应用于所有受身份验证保护的网页,用户会话注销登出后应立即清理会话相关信息,终止相关的会话连接访问控制控制方法将访问控制的逻辑代码与应用程序其他代码分开服务端根据会话标识来进行访问控制管理。 控制管理限制只有授权的用户才能访问受保护的URL、文件、服务、应用数据、配置、直接对象引用等 接口管理限制只有授权的外部应用程序或接口才能访问受保护的本地程序或资源等 权限变更当权限发生变更时,应记录日志,并通知用户是否是本人操作,告知存在的安全风险SQL注入概述用户的输入进入应用程序的SQL操作前,对输入进行合法性校验。 参数化处理用参数化查询(PHP用PDO,Java用 PreparedStatement,C#用 Sqlparameter)方法对敏感字符如"进行转义,然后再进行SQL操作。 最小化授权为每个应用配置最小化数据库操作权限,禁止用管理员权限进行数据库操作,限制操作连接数。 敏感数据加密敏感信息都采用了加密、哈希或混淆等方式进行保密存储,降低可能漏洞带来的数据泄露风险. 禁止错误回显禁止系统开启 Debug模式或异常时返回包含敏感信息的提示,建议使用自定义的错误信息模板异常信息应存放在日志中用于安全审计XSS注入输入校验对输入的数据进行过滤和转义,包含但不限于&lt;&gt;“9%0&+V"等危险特殊字符 输出编码输入数据输出到不同场景中进行不同形式的编码,如输出到HTML标签中则进行HTML编码输出到URL中则进行URL编码,输出到JS中则行 Script编码,输出到 Stylet中则进行CSs编码XML注入输入校验在XML文档内部或外部引用数据时,过滤用户提交的参数,如&lt;、&gt;&等特殊字符。禁止加载外部实体,禁止报错 输出编码建议对XML元素属性或者内容进行输出转义敏感信息敏感信息传输敏感信息传输时,禁止在GET请求参数中包含敏感信息,如用户名、密码、卡号等。建议为所有敏感信息采用TSL加密传输。 客户端保存客户端保存敏感信息时,禁止其表单中的自动填充功能、以明文形式保存敏感信息 服务端保存服务端保存敏感信息时,禁止在程序中硬编码敏感信息,明文存储用户密码、身份证号、银行卡号、持卡人姓名等敏感信息,临时写入内存或文件中的敏感数据,应及时清除和释放 敏感信息维护敏感信息维护时,禁止将源码或SQL库上传到开源平台或社区,如 Github、开源中国等。 敏感信息展示敏感信息展示时,如果是展示在web页面上,应在后端服务器上进行敏感字段的脱敏处理。CSRF跨站请求伪造Token使用在重要操作的表单中增加会话生成的 Token字段次一用,提交后在服务端校验该字段 二次验证在关键表单提交时,要求用户进行二次身份验证如密码、图片验证码、短信验证码等 Referer验证检验用户请求中 Referer:字段是否存在跨域提交的情况文件上传安全身份校验进行文件上传时,在服务端对用户的身份进行合法性校验 合法性校验进行文件上传时,在服务端对文件属性进行合法性校验,白名单形式检查文档类型(如文件的后缓名、文件头信息校验等)和大小(图片校验长、宽和像素等)。 存储环境设置进行文件保存时,保存在与应用环境独立的文档服务器中(配置独立域名),保存的目录权限应设置为不可执行 隐藏文件路径进行文件保存时,成功上传的文件需要进行随机化重命名,禁止给客户端返回保存的路径信息。 文件访问设置进行文件下载时,应以二进制形式下载,建议不提供直接访问(防止木马文件直接执行)接口安全网络限制调用方网络限制,比如通过防火墙、主机host和Nginx deny等技术措施进行校验。 身份认证调用方身份认证,比如key、 secret、证书等技术措施进行校验,禁止共享凭证 完整性校验调用的数据安全,对全部参数使用SHA1等摘要运算进行数字签名,识别数据被篡改 合法性校验调用的参数检查,如参数是否完整,时间戳和Token是否有效,调用权限是否合法等 可用性要求调用的服务要求,调用满足等幂性即保持数据一致性,对调用频率和有效期进行限制 异常处理调用的异常处理,调用行为实时检测,发现异常及时阻拦I/O操作共享环境文件安全在多用户系统中创建文件时应指定合适的访问许可,以防止未授权的文件访问,共享目录中文件的读/写/可执行权限应该使用白名单机制,实现最小化授权。 数据访问检查防止封装好的数据对象被未授权使用,设置合理的据缓存区大小以防止耗尽系统资源, 应用文件处理应用程序运行过程中创建的文件,需设置问权限(读、写、可执行),临时文件使及时删除运行环境最小化开放端口关闭操作系统不需要的端口和服务 后台服务管理后台(如数据缓存和存储、监控、业务管理等)务限内部网络访问,开放在公网的必须设置身份验证和访问控制。 环境配置使用安全稳定的操作系统版本、Web股务器软件各种应用框架、数据库组件等 敏感代码处理将客户端敏感代码(如软件包签名、用户名密码校验等)都放在o等软件包中防止篡改。 关闭调试通道生产代码不包含任何调试代码或接口 通信安全配置网站的HTTPS证书或其它加密传输措施。异常处理容错机制在应用实现时应包含完整的功能异常捕获机制如try-catch块,典型位置:文件、网络、数据库、命令操作等。一旦出现异常,应该在日志中完整记录异常的发生时间、代码位置、报错详情、触发错误的可能用户等,重要系统的严重异常应该有报警的机制,及时通知系统运营者及时排查并修复题 自定义错误信息在生产环境下,应用程序不应在其响应中返回任何系统生成的消息或其他调试信息,配置应用服务器使其以自定义的方式处理无法处理的应用程序错误,返回自定义错误信息 隐藏用户信息禁止在系统异常时泄露用户的隐私信息,典型的有:身份信息、个人住址、电话号码、银行账号、通讯记录、定位信息等 隐藏系统信息禁止在系统异常时泄露系统的敏感信息(用户账户和密码、系统开发密钥、系统源代码、应用架构、系统账户和密码、网络拓扑等)。 异常状态恢复方法发生异常时要恢复到之前的对象状态,如业务操作失败时的回滚操作等,对象修改失败时要恢复对象原来的状态,维持对象状态的一致性日志规范记录原则确保日志记录包含了重要的应用事件,但禁止保存敏感信息,如会话标识,账户密码、证件等 事件类型记录所有的身份验证、访问操作、数据变更、关键操作、管理功能、登出记录等事件。 事件要求日志一般会记录每个事件的发生时间、发出请求的IP地址和用户账户(如果已通过验证)。 日志保护日志受到严格保护,避免未授权的读取或写入访问。三、图书推荐如果对笔者的文章较为感兴趣,可以关注笔者新书《PHP Web安全开发实战》,现已在各大平台上架销售,封面如下图所示作者:汤青松日期:2018-11-13微信:songboy8888 ...

November 21, 2018 · 1 min · jiezi

遭受刷验证码攻击后的企安建设规划感想

背景公司上市不到两周,便遭受到了黑客攻击,其中笔者团队的验证码比较容易识别,攻击者通过ORC识别刷了10几万的短信,除了造成一笔资金开销外,也给服务器带来了很大的压力;并且在阿里云的控制台当中每天都能看到很多攻击信息,却没有拦截,原因是没有购买WAF防火墙,售后也频繁催促购买其安全设施;所以技术负负责人也开始重视起安全问题来,笔者因为懂一些安全技术,所以老大希望笔者在这方面做一些规划指导,周末花了点时间根据公司的现状做了一下规划设想,下文便是当时的口述汇报,后来整理成了文字版,给读者做一些参考吧。一、网络安全威胁提到安全可能直觉上会想到安全漏洞,代码安全等问题,不过安全一般比直觉上的范围更广泛,主要有来自于六个方面:网络安全、主机安全、应用安全、数据安全、运维安全、法律风险等。1.1 网络层拒绝服务攻击,分布式拒绝服务攻击(DDoS),是最暴力、血腥、有效的攻击方式,可直接导致企业云上业务系统带宽堵塞。DDOS攻击防御有两个核心点,首先是识别谁是恶意攻击,另外就是要有足够的带宽和服务器性能来处理这些请求,DDOS攻击是在太野蛮,应对的方法也比较被动,可以使用云平台的防DDOS产品,但也会有误伤,所以遇到这种攻击也只能使用这种无奈的处理来应对。1.2 主机层云主机入侵攻击,云主机是企业云上业务系统的重要承载,攻击者通过暴力破解或配置漏洞等缺陷入侵云主机,用以构建僵尸网络、窃取数据及敲诈勒索等。主机层的风险通常是一些通用漏洞的风险,比如2016年心脏滴血事件全球的服务器都会受到此影响,因此到相对好处理,我们可以使用阿里云的安骑士产品,一键修复系统中的安全漏洞。1.3 应用层Web应用漏洞攻击,企业云上业务系统对外提供服务的诸多系统采用HTTP/S应用协议(Web),攻击者利用Web服务可能存在的诸多漏洞进行攻击,窃取业务系统数据或权限等。应用层变更最为频繁,每家的应用特点都有一些差异,所以通常应用层受攻击的可能性最大,要防御此风险需要持续不断的进行跟进,比如对开发的安全意识,安全开发进行培训,对项目上线前的测试增加安全测试部分。1.4 数据层数据窃取或篡改云上业务系统数据在传输过程中经过互联网,可能被中途窃取或篡改,造成数据完整性和机密性受到影响。数据层相对范围比较广,比如代码是否泄漏,是否有数据泄漏,以及页面挂马,网站的留言的黄赌毒关键词筛选等,因为这些数据泄漏的途径会随着应用层的变化而变化,因此数据层也同样需要持续跟进。1.5 运维层运维人员违规风险操作企业云上业务系统需要内部人员进行运维操作,如何防范高风险的运维操作至关重要。不过运维层的操作风险倒也是各个厂家的一些通用风险,因此解决方案也相对较多,比如使用堡垒机在可视化界面上分配权限,这个权限可以让一个账户指定开启多长时间,并且还可以全程监控,以及操作记录回查,因此风险不大。1.6 合规层国家等级保护2017年6月,国家网络安全法开始实施,企业安全建设不仅仅是内部驱动,同时也有法律驱动。包括实名制,以及日至留存,制定相应的企业安全防护策略等。二、安全制度大多数人可能想到安全是从安全技术上来解决,实际上安全问题不仅仅靠的是技术层面,更多的是从制度上去解决的;2.1 安全工程化这里提一下SDL,SDL是英文字母的缩写,中文名称是安全开发生命周期,他是一套安全的生成流程。最开始来自于微软,在微软2004年以前windows系统和office中存在大量安全漏洞,为了解决这些问题提出了SDL,当使用了SDL之后office、windows的安全漏洞大量降低,后来被各个厂商推广。SDL从 安全培训-》需求分析-》设计-》实施-》安全验证-》发布-》响应 这7个方面入手,每一个环节有相应的安全标准,不过微软标准版的SDL推广并不是很顺利,原因很多,但标准版SDL比较繁重是一个重要的因素,因此各家都有自己的一套SDL标准,在这方面我们也可以进行一些借鉴,制定一套自己的SDL标准,这个标准的制定一定要符合可执行可落地来为依据,可以参考我下面的落地实施部分。2.2 对外沟通2016年前以前,白帽子发现漏洞在乌云网报告,乌云网通知到各个公司,2016年7月之后乌云网关闭,一批白帽子被抓,导致白帽子发现漏洞不敢报告;不过后来各家开始组建自己的漏洞报告平台,2017年6月安全法出来之后,大部分公司要合规,因此大一些的公司通常都有自己的安全团队,比如教育行业好未来的应急响应中心;现在大家发现漏洞通常会报告给对应的平台的SRC;比如教育行业的好未来SRC:http://src.100tal.com/瓜子二手车的SRC:https://security.guazi.com/以及更多的SRC平台,如下图2.3 安全落地上面提到了安全工程化,不过SDL的标准对于我们现阶段太过于理想,所以需要针对实际情况制定一些可落地的方案安全编程规范将一些可能带来安全风险的操作写入规范当中去,比如参数的输入输出,服务器的安全配置,以及代码的安全发布流程等。安全培训很多时候开发者并不重视安全,又或许对安全缺乏了解,比如系统中有哪些安全漏洞,漏洞的危害和原理是什么样的,怎么去防止这些漏洞等等,大部分开发者的安全意识还是很弱,和互联网技术不重视安全也有关系,可能一些开发者知道一些SQL注入、XSS,但是一深入去问一下,就不知所以然,而开发者对安全起了至关重要的作用,所以很有必要对开发者进行安全意识和安全基础技术的培训,这样才能从源头解决安全问题。代码审计这个不管是对于安全的角度还是对于减少BUG的角度都是很有必要的一个环节,对每个项目设定一个代码审计人员,可以对此这些审计人员组织一次代码审计指导;安全测试目前我们项目上线做了充足的功能测试,但是安全测试相对偏少,或者说并不全面,可以专门针对测试的人进行一些安全工具的测试的指导。三、安全产品阿里云提供的安全产品比较齐全,不过价格比较贵,而目前我们没有专门负责安全的人来维护,因此选择的安全产品方向为能直接提升安全,这样才能发挥最大价值,否则便成了手有宝刀,却无刀法,下面是三个必要的安全产品:1. 安骑士前面提到了主机安全,主机安全不会经常变动,因此应对的是一些通用风险,安骑士提供一键修复通用主机漏洞的能力,可以快速修补主机安全,避免人工去修复并不知道如何去修,或者修复不及时。2. WAF防火墙WAF防火墙对应的是应用层安全,可以针对一些代码级的安全漏洞做一些安全防护,应用层变化最大,因此必要性比较大,不过要注意的是WAF防火墙只能处理代码级的漏洞,而逻辑层的却无能为力,比如上次的刷验证码,防火墙则只能将频率非常高的IP封锁,但无法阻挡刷验证码的漏洞问题。3. CA证书CA证书的作用是HTTPS,是用来对传输过程加密,比如服务器提交数据到服务器过程不被攻击者拦截,又或者我们服务器的数据不被一些网络运营商插入广告等,因此重要性也是十分重要。另外针对阿里云的安全产品较贵的,可以参考也可以参考其他家的安全产品,比如百度的云加速,就带有了WAF防火墙和防DDOS功能,地址为 su.baidu.com四、新书推荐如果对笔者的实战文章较为感兴趣,可以关注笔者新书《PHP Web安全开发实战》,现已在各大平台上架销售,封面如下图所示作者:汤青松日期:2018-11-13微信:songboy8888

November 13, 2018 · 1 min · jiezi

基于Docker搭建Jumpserver堡垒机操作实践

一、背景笔者最近想起此前公司使用过的堡垒机系统,觉得用的很方便,而现在的公司并没有搭建此类系统,想着以后说不定可以用上;而且最近也有点时间,因此来了搭建堡垒机系统的兴趣,在搭建过程中参考了比较多的文档,其中最详细的还是官方文档,地址如下所示:Jumpserver 文档二、操作概要1. 系统运行2. 配置入门3. 测试验证三、系统运行在官方文档中安装堡垒机有很多种方法,这让笔者有些纠结,另外而且在不同系统中安装方法也不一致,不过正在徘徊不定时,发现一种通用的安装方法,便是采用docker进行安装,因此本文中笔者将以docker安装为例3.1 下载镜像在docker官方镜像库当中并没有收录jumpserver,因此下载镜像命令如下所示:docker pull registry.jumpserver.org/public/jumpserver:1.0.0下载过程可能比较慢,笔者大约花费了14分钟才将其下载完成,下载完成后结果如下所示1.0.0: Pulling from public/jumpserveraf4b0a2388c6: Pull completeaa66a3d10fd2: Pull complete1d4c6a27f2ac: Pull complete2490267572de: Pull completeb00f1599768d: Pull complete398fc903cdc3: Pull completef8490bbfc09a: Pull complete86d238b365f5: Pull complete2cd3b1ef59b2: Pull complete4a21434eeb73: Pull completeae8cf3e909e0: Pull complete7c440776471a: Pull complete0a5e895f91af: Pull completeb86672241685: Pull completeaf16a4945f95: Pull complete0374e723cd6c: Pull completee18b86849df9: Pull complete648aa832cb74: Pull completeb52364a5c704: Pull completeDigest: sha256:0f26e439c492ac52cbc1926aa950a59730607c947c79557ab3da51bfc2c7b5d4Status: Downloaded newer image for registry.jumpserver.org/public/jumpserver:1.0.03.2 运行镜像下载之后笔者需要将下载下来的容器运行起来,为了防止80端口被宿主机其他进程所占用,因此将容器端口映射到宿主机的8011上,运行命令如下所示:docker run –name jms_server -d -p 8011:80 -p 2222:2222 registry.jumpserver.org/public/jumpserver:1.0.0在参数当中因为有加入后台运行参数-d,容器运行之后终端不会进入容器bash中,而且当命令执行成功之后,docker将会返回容器ID,如果返回信息则可能出现了异常错误,正常返回结果如下所示4709a7d85af28bf05a63fb3e42541a41c30edda6668fd54a446cfab006c35b9e3.3 运行检查容器运行之后,笔者需要对其进行检测确保运行成功,检查方式有两个,首先观察容器是否正常运行,然后是检查堡垒机是否能被浏览器所访问首先通过如下命令可以查看当前正在运行的容器docker ps如果容器正常运行将会出现刚在笔者所运行的堡垒机容器ID,正常返回结果参考如下CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4709a7d85af2 registry.jumpserver.org/public/jumpserver:1.0.0 “/opt/start_jms.sh” 8 minutes ago Up 8 minutes 443/tcp, 0.0.0.0:2222->2222/tcp, 0.0.0.0:8011->80/tcp jms_server在返回结果当中可以看到之前docker返回的容器ID正处于运行状态,便可以确定容器运行正常,接着笔者还需要通过浏览器来检测是否运行成功,使用浏览器打开如下地址http://127.0.0.1:8011/当浏览器出现如下界面时,则基本代表成功四、配置入门在确定系统正常运行之后,接下来就可以对系统进行一些配置,堡垒机配置比较简单,下面的配置是将是使用堡垒机最为基础的一些配置,配置主要是添加一些资产进行管理,这便需要添加管理用户、系统普通用户、账户授权等操作。4.1 登录系统在前面的检验运行的截图当中可以看到需要登录,而账号和密码笔者并没有在官方文档中所看到,笔者随手一尝试,发现用户名和密码分别是admin与admin,如下图所示登录成功之后,进入系统看到的界面如下图所示4.2 管理用户接下来笔者需要添加一些资产,添加资产的前提条件是有一个管理用户,这个管理用户是资产的最高权限账户,堡垒机之后会使用此账户来登录并管理资产,和获取一些统计信息,笔者在资产管理->管理用户列表中点击创建系统用户按钮,便来到了创建管理用户的页面,如下图所示在表单中可以看见必须填写用户名,和认证所用的密码或私钥,按照真实情况去填写,比如笔者的资产最高权限账户是song,密码123456Ab,那么就如实填写上去。4.3 资产管理在添加管理用户之后,便可以添加资产了,添加资产也非常的简单,在资产列表点击创建资产按钮,便来到了添加资产的页面,如下图所示添加资产需要填写,资产的IP地址,以及ssh的端口号,以及选择资产的操作系统类型,并且选择用哪一个管理用户4.4 系统用户在资产管理下还有一个系统用户管理,这个系统用户的使用场景是,有时候需要在很多个目标资产中创建一个普通账户,这时候肯定是十分麻烦;此时便可以通过堡垒机上的系统用户管理来创建一个系统用户;然后下发到目标资产中,这样一来就不需要去目标主机一个个登录然后去创建,因此非常方便,添加系统用户如下图所示创建系统用户需输入需要创建的账号,以及选择认证的方式,默认为秘钥方式,也可以将选择框选中去掉,通过密码来认证。五、测试验证在前面的配置步骤操作完毕后,便可以进行一些常规功能验证,以此来加深对jumpserver系统的了解,这些功能测试点有 资产连接测试、用户授权、Web终端、在线会话、命令记录等功能。5.1 连接测试连接测试的目的是检查资产是否可以被堡垒机所访问,可以在资产列表点击资产名称,便可以进入资产详情页面,右侧有两个按钮,点击刷新按钮,正确配置的参考效果如下图所示如果能看到左侧的硬件信息发生了变更,就代表此前配置的管理用户没有问题,否则会弹出错误提示框;5.2 用户授权当配置资产后,如果想在堡垒机中直接连接终端就还需要给用户授权,授权分为两个步骤,第一步是给web终端账户授权,在会话管理->终端管理,如下图所示第二步则是给用户自己本身授权,在授权管理->资产权限->创建权限规则中做好相应配置,如下图所示5.3 web终端当给用户授权之后,用户便可以会话管理->Web终端中与系统进行交互,如下图所示5.4 在线会话有些时候想看谁在操作服务器,可以很轻松的通过在线会话功能来查看当前有哪些用户在操作终端,在会话管理->在线会话列表中进行查看,如下图所示5.5 命令记录笔者觉得堡垒机最大的作用之一便是审计,如果想知道某个用户在系统中执行了那些命令,可以很方便的在会话管理->命令记录中进行查看,如下图所示六、 图书推荐如果对笔者的实战文章较为感兴趣,可以关注笔者新书《PHP Web安全开发实战》,现已在各大平台上架销售,封面如下图所示作者:汤青松微信:songboy8888日期:2018-10-30 ...

October 30, 2018 · 1 min · jiezi