【ARTS】01_01_左耳听风-20181112~1116
每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)
Algorithm
做一个 leetcode 的算法题
771. Jewels and Stones
1)problem
https://leetcode.com/problems/jewels-and-stones/
ou're given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in S is a type of stone you have. You want to know how many of the stones you have are also jewels.
The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so "a" is considered a different type of stone from "A".
Example 1:
Input: J = "aA", S = "aAAbbbb"
Output: 3
Example 2:
Input: J = "z", S = "ZZ"
Output: 0
Note:
- S and J will consist of letters and have length at most 50.
- The characters in J are distinct.
2)answer
设定一个数字变量,判断单个字符是否在一个字符串中。使用双重for循环进行判断,如果相同就将数字变量加1,否则就跳过。最后返回数字变量的值就是手中宝石的数量。
3)solution
#include<stdio.h>
#include <string>
using std::string;
class Solution {
public:
int numJewelsInStones(string J, string S) {
int num = 0;
for (auto J_value : J)
{
for (auto S_value : S)
{
if (J_value==S_value)
{
num++;
}
}
}
return num;
}
};
int main()
{
Solution solu;
int ret;
ret = solu.numJewelsInStones("aA", "aAAbbbb");
printf("%d \n", ret);
ret = solu.numJewelsInStones("z", "ZZ");
printf("%d \n", ret);
return 0;
}
Review
本周阅读的英文技术文章
利用BurpSuite到SQLMap批量测试SQL注入
https://www.exploit-db.com/docs/english/45428-bulk-sql-injection-using-burp-to-sqlmap.pdf
1)场景
测试大门户的SQL注入漏洞
2)问题难点
SQLMap只能对URL单一测试
3)解决问题的方法
通过Python脚本把Burp的HTTP请求提取出来交给SQLMap批量测试,提升找大门户网站SQL注入点的效率。
4)方法细节
文章里提到的方法是提取出来Brup对HTTP的请求,但只能是手动对网站访问后Burp的历史纪录。如果是GET请求倒还好,如果是POST而且是伪静态类型,参数就检测不出来了。在burp的target选项卡也有扫描URL的,可以用Burp自带的爬虫方法爬行一遍之后再提取出URI进行测试。
5)总结
除此方法外,也可以使用burp的插件实现批量测试的效果。
渗透神器合体:在BurpSuite中集成Sqlmap
https://www.freebuf.com/sectool/45239.html
Tip
安全分析-MuddyWater
- 英文原文
MuddyWater expands operations
https://securelist.com/muddywater/88059/
- 译文
详细分析MuddyWater APT组织新型攻击技术
https://www.anquanke.com/post/id/161789
1)场景
监测到大量的鱼叉式网络钓鱼邮件
2)问题难点
通过宏的方式运行VBA代码,然后投放建立C&C通信的PowerShell代码,向C&C发送被感染用户系统信息,然后接收恶意软件支持的命令。
3)恶意代码分析
启用宏的Office 97-2003 Word文件,为了防止静态分析,该宏受密码保护。
1、宏投放INF、SCR和文本文件
2、宏投放VBS和文本文件
4)方法细节
- 宏Payload分析
经过Base64编码后的宏Payload,执行以下操作:
1、将2-3个文件放入ProgramData文件夹。Payload会将文件放置到ProgramData文件夹的根目录或子目录中,这些文件的文件名根据恶意软件不同版本而变化。
EventManager.dll
EventManager.logs
WindowsDefenderService.inil
2、在当前用户的RUN密钥(HKCU)中添加一个注册表项,以便在用户下次登录时能够运行。在某些情况下,宏会立即生成恶意Payload或恶意进程,而无需等待用户的下次登录。注册表项中的可执行文件名称会根据不同版本而变化。
名称:WindowsDefenderUpdater
类型:REG_EXPAND_SZ
内容:c:\windows\system32\rundll32.exe advpack.dll,LaunchINFSection C:\ProgramData\EventManager.logs,Defender,1,
在用户下次登录时,投放的Payload将会运行。所选的可执行文件专门用于绕过白名单解决方案,因为这些文件全部来自Microsoft,很可能已经在白名单之中。这些文件的类型可能是INF、SCT和文本文件(3个文件的情况),也可能是VBS和文本文件(2个文件的情况)。
- 宏投放INF、SCR和文本文件
1、INF通过advpack.dll的LaunchINFSection函数启动;
2、INF通过scrobj.dll(Microsoft Scriptlet库)注册SCT文件;
3、借助WMI(winmgmt),SCT文件中的JavaScript或VBScript代码会生成只有一行的PowerShell程序,最终形成文本文件。
- 宏投放VBS和文本文件
VBS文件首先将自身进行解码,随后调用mshta.exe,将只有一行的VBScript代码传递给它,之后生成一个PowerShell单行程序,最终形成文本文件(通常是经过Base64编码后的文本)。
- 恶意PowerShell代码分析
读取在ProgramData中投放的(经过编码的)文本文件,然后对其进行解码,所生成的代码具有多层混淆。
检查系统正在运行的进程。如果找到,就会强制重启计算机。列表中的进程名称通常都与研究人员使用的各类工具相关。
“win32_remote“,”win64_remote64“,”ollydbg“,”ProcessHacker“,”tcpview“,”autoruns“,”autorunsc“,”filemon“,”procmon“,”regmon“,”procexp“,”idaq“,”idaq64“,”ImmunityDebugger“,”Wireshark“,”dumpcap“,”HookExplorer“,”ImportREC“,”PETools“,”LordPE“,”dumpcap“,”SysInspector“,”proc_analyzer“,”sysAnalyzer“,”sniff_hit“,”windbg“,”joeboxcontrol“,”joeboxserver“
- C&C通信
通过 https://api.ipify.org/ 网站来获取被感染用户的公网IP
- 攻击者溯源
MuddyWater使用的PowerShell代码进行反混淆后,该代码类似于此前发现的恶意PowerShell脚本。攻击所使用的多个文档中,还带有嵌入的路径,其中包含作者的主机用户名称。这些路径在特定情况下会由Office嵌入到文档中,例如在将二进制对象(OLE控件,例如文本框或命令按钮)添加到Word文档中,就会附带其路径。这些路径具体如下:
C:\Users\leo\AppData\Local\Temp\Word8.0\MSForms.exd
C:\Users\poopak\AppData\Local\Temp\Word8.0\MSForms.exd
C:\Users\Vendetta\AppData\Local\Temp\Word8.0\MSForms.exd
C:\Users\Turk\AppData\Local\Temp\Word8.0\MSForms.exd
5)总结
MuddyWater样本的来源是邮件系统,通过对office类样本分析得到宏代码执行后的行为,获取文件生成的路径、用户名称、反调试方式、代码相似度、CC通信指令。对攻击者来源、行为猜测。
Share
在乙方学会的东西是要真切落实到实际的场景中,才算是有效的学习。工作了几年,很多基础知识怎么学习,怎么出成果,已经掌握了思路。但是仅仅是广度达到。很多方法论适用于固定动作的安全检查,但是落实到实际还是有问题。
读文《浅谈大型互联网的企业入侵检测及防护策略》
1)场景
突然觉得很迷茫,不知道自己5年后该成为哪样的人。由于自己之前从渗透测试换了二进制的方向,大城市的就业机会虽然多。但是面试的岗位职能都不一样,
2)问题难点
次选择工作的时候,同一个名称的安全岗位职责和需求能力都不一样。甲方公司重视开发能力、创业公司重视综合能力、还有一些公司重视知识的广度和深度。
自己从渗透->测评->恶意代码分析三个阶段都经历了一遍,从技术、文档到分析。不知道自己该选怎样的方向进行职业规划。
3)解决思路
找了前辈进行交流,寻求意见。其中印象比较深的两个前辈说的。
乙方学到的东西,都需要甲方兑现,在可以选择的前提下,选择最大的平台,做点成绩出来。
筛选岗位最重要的三个级别,一是熟练级别,工作可以做。然后在某个领域进行积累,发表过具有影响力和深度的paper。最后是在某些重要的会议发表过议题演讲。
4)方法细节
最近一段时间梦醒就是思考怎样打造自己的竞争力。把经验积累。
安全领域发展多年,很多测试方法都通过逐渐的发展变成了工具化、平台化。
安全检查根据网络设备品牌型号、主机的常用命令。总结起来成了基线检查工具
安全测试根据应用系统的漏洞和特征成了漏洞扫描工具。
基于“攻防对抗”的考量,从防守方对于安全运营会有很高的要求。
通过美团技术团队的分享文中感受到作者这些年工作积累的经验和成绩感到自己要走的路还有很长。
《浅谈大型互联网的企业入侵检测及防护策略》
http://netsecurity.51cto.com/art/201811/586498.htm?mobile
针对企业的入侵检测、常见的入侵手法应对、入侵检测的原则、产品主流形态、效果评价指标和关键要素进行了梳理。其中如何发现APT的方式部分结合目前的工作形态也确实如此。
- 针对企业的入侵检测
入侵检测可以重点关注GetShell这个动作,以及GetShell成功之后的恶意行为。
- 常见入侵手法与应对
高危服务入侵: 针对每一个高危服务做入侵检测的成本较高,因为高危服务的具体所指非常的多,不一定存在通用的特征。所以,通过加固方式,收敛攻击入口性价比更高。禁止所有高危端口对互联网开放可能,这样能够减少90%以上的入侵概率。
WEB入侵:
针对Web服务的入侵痕迹检测,可以考虑采集WAF日志、Access Log、Auditd记录的系统调用,或者Shell指令,以及网络层面Response相关的数据,提炼出被攻击成功的特征。
0day入侵:
把精力聚焦在有黑客GetShell入口和之后的行为上,可能比关注漏洞入口更有价值。当然,具体的漏洞利用还是要实际跟进,然后验证其行为是否符合预期。
办公终端入侵:
EDR类的产品+邮件安全网关+办公网出口的行为审计+APT产品的沙箱等,联合起来,可以采集到对应的数据,并作出相似的入侵检测感知模型。
- 入侵检测基本原则
某个单点的检测能力有缺失时,如果为了“政治正确”,在这个单点上进行无止境的投入,试图把单点做到100%能发现的能力,很多时候可能只是在试图制造一个“永动机”,纯粹浪费人力、资源,而不产生实际的收益。将节省下来的资源,高性价比的布置更多的纵深防御链条,效果显然会更好。
- 入侵检测产品的主流形态
基于数据去建模,比如针对WebShell的检测,首先要识别Web目录,再对Web目录下的文件进行文本分析,这需要做一个采集器。基于Shell命令的入侵检测模型,需要获取所有Shell命令,这可能要Hook系统调用或者劫持Shell。基于网络IP信誉、流量payload进行检测,或者基于邮件网关对内容的检查,可能要植入网络边界中,对流量进行旁路采集。
个人理解是基于WEB日志、系统日志、流量日志进行检测。
- 入侵检测效果评价指标
主动发现的入侵案例/所有入侵 = 主动发现率。这个指标一定是最直观的。
真实的入侵其实是一个低频行为,大型的互联网企业如果一年到头成百上千的被入侵,肯定也不正常。因此,如果很久没出现真实入侵案例,这个指标长期不变化,也无法刻画入侵检测能力是否在提升。
所以,我们一般还会引入两个指标来观测:
- 蓝军对抗主动发现率
- 已知场景覆盖率
- 影响入侵检测的关键要素
要让一个入侵事件被捕获,我们需要入侵检测系统长时间、高质量、高可用的运行。
- 数据采集的完整性(全链路的对账)。
- 每一个策略时刻工作正常(自动化拨测监控)。
- 基础数据的准确性。
- 工单运营支撑平台及追溯辅助工具的便捷性。
- 如何发现APT
- 木马免杀的,用沙箱+人工分析,哪怕效率低一些,还是试图做出定性,并快速的把IOC(威胁情报)同步给其它客户,发现1例,全球客户都具备同样的感知能力。
- 流量加密变形对抗的,用异常检测的模型,把一些不认识的可疑的IP关系、payload给识别出来。当然,识别出来之后,也要运营人员跟进得仔细,才能定性。
- 攻击手法高级的,还是会假定黑客就用鱼叉、水坑之类的已知手法去执行,然后在邮箱附件、PC终端等环节采集日志,对用户行为进行分析,UEBA试图寻找出用户异于平常的动作。
- AI在入侵检测领域的正确姿势
针对一个具体的攻击场景,怎么样采集对应的入侵数据,思考这个入侵动作和正常行为的区别,这个特征的提取过程,往往决定了模型最终的效果。特征决定了效果的上限,而算法模型只能决定了有多接近这个上限。
5)总结
进甲方想法:这几天拜读了职业欠钱的《浅谈大型互联网企业入侵检测及防护策略》。
在乙方学到的东西,在甲方兑现,在可以选择的前提下,选择最大的平台,才有可能做出成绩。
研究方向:现目前区块链的研究与传统安全还是相似。可以往漏洞分析方向发展,不过单纯的漏洞分析和审计能给企业带来什么价值,还有待思考。
【ARTS】01_01_左耳听风-20181112~1116的更多相关文章
- 【ARTS】01_21_左耳听风-201900401~201900407
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- 【ARTS】01_19_左耳听风-20190318~20190324
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_18_左耳听风-20190311~20190317
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_16_左耳听风-20190225~20190303
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_14_左耳听风-20190211~20190217
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_10_左耳听风-20190114~20190120
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_09_左耳听风-20190107~20190113
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理
Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...
- SpringMVC(五)-- springmvc的系统学习之拦截器
资源:尚学堂 邹波 springmvc框架视频 一.拦截器简介 使用拦截器时, (1)实现HandlerInterceptor (2)在springmvc配置文件中配置以下信息 <mvc:int ...
- VS2013的安装与测试
第一步:下载完成之后点击安装,在安装过程中会出现很多选择,选择社区版(c++),安装完成: 第二步:安装完成之后打开VS2013,如图所示: 第三步:按以下步骤进行 第四步:点击[OK]之后 第五 ...
- C# 项目迁移 Microsoft.VisualStudio.Tools.Office.BuildTasks 生成解决方法报错:请确认 <UsingTask> 声明正确,该程序集及其所有依赖项都可用
问题定位: 1.在Server2003上使用vs2010开发的项目,移到Win8上,同样使用vs2010打开.在生成解决方案的时候有如下报错: 未能从程序集 Microsoft.VisualStudi ...
- final 发布 领跑衫获奖感想
时间 :2016年5月20日 13:30--14:00 final发布中,我们团队严一格演示了最终版本的四则运算项目, 修正了beta版本发布时弹幕部分无法消除的bug,总体效果达到预期. 遗憾的是没 ...
- ES6学习笔记(一):变量赋值和基本数据类型
let和const let和const不存在变量提升 变量一定要在声明后使用,否则报错. var a = []; for (var i = 0; i < 10; i++) { a[i] = fu ...
- Luogu1641 SCOI2010生成字符串(组合数学)
NOI2018冒泡排序的一个子问题. #include<iostream> #include<cstdio> #include<cmath> #include< ...
- #35 string(缩点+动态规划)
容易发现有了交换相邻字符的操作后,只要字符串所含有的字符种类和数量相同其就是等价的.这样的状态只有n^3级别,将其抽象成点子串变换抽象成边后就是求最长路径了,缩点dp解决. 码量巨大,不是很明白要怎样 ...
- maven上传jar包到nexus私服后的存放路径 以及 使用IDEA上传jar包的步骤
maven上传jar包到nexus私服的方法,网上大神详解很多,那么上传后的jar包存放到哪里了呢? 在下使用nexus3.2.1版本,在本地搭建了私服,使用maven上传jar包.最后结果如下: 点 ...
- BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集
传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...