每周至少做一个 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的更多相关文章

  1. 【ARTS】01_21_左耳听风-201900401~201900407

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  2. 【ARTS】01_20_左耳听风-20190325~20190331

    zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...

  3. 【ARTS】01_19_左耳听风-20190318~20190324

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  4. 【ARTS】01_18_左耳听风-20190311~20190317

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 【ARTS】01_17_左耳听风-20190304~20190310

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【ARTS】01_16_左耳听风-20190225~20190303

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. 【ARTS】01_14_左耳听风-20190211~20190217

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. 【ARTS】01_10_左耳听风-20190114~20190120

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  9. 【ARTS】01_09_左耳听风-20190107~20190113

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

随机推荐

  1. linux内核分析--操作系统是如何工作的?

    一个简单的时间片轮转多道程序 操作系统的"两把剑":中断上下文(保存现场和恢复现场)和进程上下文的切换 源代码的分析 *使用的源代码为视频中所使用的精简内核的源代码 首先分析myp ...

  2. Linux命令(十一) 显示文件类型 file

    命令介绍 file 命令是用来显示文件的类型,对于每个给定的参数,该命令试图将文件分类,分辨的类型有文本文件.可执行文件.压缩文件.或其它可理解的数据格式. 常用参数介绍 -b 不显示文件名称,只显示 ...

  3. SpringBoot 7.SpringBoot 结合 Thymeleaf

    一.引入 Thymeleaf 依赖 <!-- Spring boot - thymeleaf --> <dependency> <groupId>org.sprin ...

  4. Jenkins发送邮件中文乱码问题解决

    在环境变量中添加: JAVA_TOOL_OPTIONS  =  -Dfile.encoding=UTF8 配置好后,重启Jenkins即可

  5. 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析

    题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...

  6. 轻松学JVM

    轻松学JVM(一)——基本原理 前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM ...

  7. AtCoder Grand Contest 030 自闭记

    A:阅读. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  8. Swap HDU - 2819 (有关矩阵的二分匹配)

    题意见大佬:https://www.cnblogs.com/gj-Acit/archive/2013/08/17/3265502.html 题目大意很明确,交换图的某些行或者是某些列(可以都换),使得 ...

  9. UVA - 10129 Play on Words (欧拉回路+并查集)

    思路: 分别存下每个字符串的首尾字符,以字符为结点,单词看作一条变,就变成了求欧拉回路了,先判断下图是否连通,然后根据欧拉回路的结论:最多只能有两个点的入读不等于初读,而且必须是一个点的出度恰好比入度 ...

  10. MT【202】内准圆

    双曲线$\dfrac{x^2}{4}-\dfrac{y^2}{12}=1$ 的右焦点为 F,左准线为 L. 椭圆C 以F和L为其的焦点及准线,过F作一条斜率为 1 的直线交椭圆C于点A和B. 若椭圆C ...