还是擦肩天桥上,无意间的回眸

每日阅读

9 月 17 日(天气晴)
[技术分享】Android代码混淆技术总结(一)(https://www.anquanke.com/post/id/85843)
  • 控制流平坦化:在不改变源代码的功能前提下,将 C 或 C++ 代码中控制语句转换成 switch 分支语句,使更加复杂

    • 目前使用的比较多的 OLLVM 的开源混淆方案,其中包括控制流平坦化、虚假控制流和指令替换
  • 花指令:花指令是位于永远不能执行的路径中,且是不完整指令而已。运行过程中,因为执行不到所以不会影响整体功能,但是若是反汇编工具的话,因为是静态反汇编就会失败。

  • 标识符混淆:对源程序的包名、类名、方法名和变量名进行重命名,用无意义的标识符来替代。

    • 常用的 ProGuard 工具
  • 字符串混淆;对于源程序的比较关键的字符串变量进行混淆,一种是 Java 层的字符串,另一种是native层

    • 编码混淆、加密处理
红队安全研发系列之免杀原理和绕过研究——起始(https://www.anquanke.com/post/id/217529)
  • 静态查杀分为已知类型查杀与未知类型查杀
  • 已知类型查杀——特征码查杀,按照指定模式进行特征匹配的算法,而具体使用什么类型的规则(既各种扫描算法)取决于扫描器,例如YARA规则。YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具
  • 未知类型查杀——静态启发式查杀,启发式查杀是对单一特征码查杀的补充,解决未知病毒查杀。早期杀软都是发现病毒,制作该病毒的特征码,但是对于未知病毒就无法查杀,而启发式则是将一类病毒总结后,归纳其特征,其后的演变都为一类病毒,这既是启发式算法。
  • 动态查杀分为指定类型查杀与聚类类型查杀。某杀软查杀cobaltstrike等知名远控则是通过shell code内存匹配来进行查杀。
  • img
9 月 18 日(天气☀️,心情😄)
JSON Web Token(JWT)攻击技巧
  • JWT 是一个轻量级业务流程管理规范,允许用户和服务器之间可靠传递消息。通常实现前端和后端的解藕,同时,它还可以与Restful API 一起使用,用于身份验证。
  • JWT 数据分为三部分:头部,有效载荷,签名。通过base64UrlEncode函数将三者隔开来
  • 主要攻击技术
    • 敏感信息泄漏,有效载荷时明文形式传输,因此,有效载荷中存在敏感信息,就会泄漏
    • 将签名算法改为 none。系统就会删除相应的签名数据
    • 将 RS256 算法改为 HS256(非对称密码算法->对称密码算法)
    • 破解HS256密钥
蜜罐调研与内网安全(https://xz.aliyun.com/t/7294)
  • 蜜罐系统通过在网络中部署感应节点,实时感知周边网络环境,同时将感应节点日志实时存储、可视化分析,实现威胁情况感知。
  • 一个好的蜜罐:能模拟大多数常见协议、能够模拟影响面广泛的应用协议和漏洞、能够在TCP/UDP端口捕获未知的恶意扫描、蜜罐便于协议扩展、蜜罐结果的数据格式简单便于分析
  • web蜜罐、服务蜜罐、其他蜜罐
  • logstash 日志解析,elasticsearch 日志存储、分析,kibana 可视化
自监督图神经网络(https://www.anquanke.com/post/id/217522)
  • 实际中大多数数据并不是如图像与自然语言一样的数据具有高度结构化与顺序化的。人际关系、社交网络、蛋白质分子结构等等,这些数据往往都具有一对多、多对一、非结构化等特性,无法使用矩阵完美表示,然而这些数据可以用图的形式进行精确表达。
  • 将深度学习的技术与思想应用于图数据结构之上催生了图神经网络。图神经网络可以捕获节点之间依赖关系,根据节点自身以及其周围邻域节点的信息建立状态的内部表示,以此获得比神经网络更为强大的表示能力。
  • GRAPH-BERT
从对老漏洞的分析谈二进制漏洞入门(https://www.freebuf.com/vuls/248394.html)
  • 所需要具备的知识,一方面逆向分析(汇编语言、动态调试、静态分析)、代码审计。另一方面,多思考,多分享
  • 漏洞背景:tcpdump4.5.1版本爆出拒绝服务漏洞。漏洞产生的原因是在函数hex_and_anscii_print_with_offset()没有对无符号型变量caplength进行检查,导致在运算过程中,整数溢出,内存访问越界。
  • 通过不停的函数回溯进行分析,找到程序崩溃的原因以及地址所代表的意义,对于简单的漏洞,分析的综合能力不用那么强,padding 不是一定的。介绍了完整的漏洞分析场景,值得一读。
leetcode-twosun

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].

  • 很简单的题目,主要题解分为循环以及 hashmap 两种思想都可。

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def twoSum(nums, target):
    hashmap = {}
    for i, num in enumerate(nums):
    if hashmap.get(target - num) is not None:
    return [i, hashmap.get(target - num)]
    hashmap[num] = i


    if __name__ == "__main__":
    nums = [2,7,9,11]
    target = 9
    print(twoSum(nums, target))
9月19日 (天气☀️,心情累💢)
  • 一双vans、一顿饭、AirPods,心情瞬间变好了。果然花钱是让心情变好的最简单方式~
发现内网存活主机的各种姿势(一)
  • namp 命令行

    • -sU 基于 UDP 的扫描

    • -T5 namp的扫描速度 -T(0-5) 越大越快

    • -sV 探测开启的端口来获取服务、版本信息

    • -sn 不扫描端口,只扫描主机

      -PR ARP ping扫描

      -sP Ping扫描 sn

      -P0 无Ping扫描

      -PS TCP SYN Ping扫描

      -PA TCP ACK Ping扫描

      -PU UDP ping扫描

      -PE/PM/PP ICMP Ping Types扫描

9月20日 (天气🌧️,心情愉悦✨)

CTF特训营(211-269)
  • chrome 中的 F12 中 sources 通常用于下断点调试,Application 记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、cookie)、缓存数据、字体、图片,security从技术层面判断当前网页是否安全,不能判断内容上的,只能判断是否代码可疑、证书是否合法
  • SQL 注入成因,在开发过程中,将 URL 中的参数、HTTP Body 中的 Post 参数或其他外来用户输入与 SQL 语句进行拼接,造成语句可控从而达到任意执行。
  • 可回显得注入(联合查询的注入、报错注入、通过注入的DNS请求,从而达到可回显)、不可回显注入(Bool盲注、时间盲注)、二次注入
  • 有两种广泛使用 的x64 ABI
    • Microsoft‘s x64 ABI:前4个参数通过寄存器 RCX、RDX、R8、R9传递,其余则是通过栈传递,但在栈上会预留 0x20 字节的空间用于临时保存前 4 个参数,返回值 RAX
      • RAX func(RCX, RDX, R8, R9, [rsp+0x20], [rsp+0x28], …… )
    • SysV x64 ABI:前 6 个参数(RDI、RSI、 RDX、RCX、R8、R9、[RSP+8]、[RSP+0x10], ……)
  • IDA 使用 FLIRT 签名库的方式来识别函数,因此即使没有带符号信息的二进制程序,也可能识别库函数。对于不能识别的函数函数名会以sub_开头,后面再加入函数的起始地址。
  • 常见算法逆向
    • base64 :如果有见到索引表 ‘ABCDEFGHIJKLMN等等’基本就是确定了 base64
    • TEA:对 TEA 的识别也比较容易,在 TEA 算法中有一个固定的常数 0x9e3779b9 或者 0x61c88647
    • AES:主要是寻找 S 盒和逆 S 盒
    • RC4: 主要是寻找初始化代码
    • MD5: 会初始化四个称作 MD5 的链接变量的整数参数,因此看见0x67452301、0xefcdab89、0x98badcfe、0x10325476
2. Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.

  • 基础数据结构题,没有什么大的难度,主要是细节考虑到位就行

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
    • result = p = ListNode(None)
    • flag = 0
    • while l1 or l2 or flag:
    • flag = flag + (l1.val if l1 else 0) + (l2.val if l2 else 0)
    • p.next = ListNode(flag%10)
    • p = p.next
    • flag = flag // 10
    • l1 = l1.next if l1 else None
    • l2 = l2.next if l2 else None
    • return result.next
红队安全研发系列之免杀原理和绕过研究——静态查杀实现与绕过(https://www.anquanke.com/post/id/217531)
  • 特征码和启发式查杀在免杀制作过程中,需要注意启发式查杀对壳一类的查杀非常厉害。

  • 特征码查杀绕过可以通过对文件反复加密,加密方式可以自选,之后内存解密加载即可。

  • 注意:这里仅仅是绕过静态特征码查杀,内存加载后被动态查杀。对于 Xor 和 base64 等加密后特征一致的算法需要多次加密。

  • 启发式查杀,主要通过模仿正常 PE 特征。

Glibc 内存管理
  • .bss 段与堆栈之间的空间是空闲的,空闲空间被分成两个部分,一部分是 heap,一部分是 mmap 映射区域。Heap 和 mmap 区域都可以供用户自由使用,在向内核请求分配空间之前,对这个空间的访问会导致 segmentation fault。
  • 内存管理风格
    • C 风格的内存管理程序主要实现 malloc() 和 free() 函数,内存管理程序主要通过调用 brk() 或者 mmap() 添加额外虚拟内存。
    • 池式内存管理,内存池是一种半内存管理方法。内存池帮助某些程序进行自动内存管理,这些程序会经历一些特定的阶段,而且每个阶段中都有分配给进程的特定阶段的内存。例如apache
    • 引用计数,所有共享的数据结构都有一个域来包含当前活动“引用”结构的次数。例如 Java
    • 垃圾收集,全自动检测并移除不再使用的对象,通常会在可用内存少于一个具体的阈值时候运行。为了有效地管理内存,很多类型的垃圾收集器都需要知道数据结构内部指针的规划,所以,为了正确运行垃圾收集器,它们必须是语言本身的一部分。
  • 12-13 讨论各种 C 内存管理程序,可以多看看
  • 在 SMP 多线程环境下,对主分配区锁争用激烈,于是增加了非主分配区(non main arena),主分配区域与非主分配区用环形链表管理。每一个分配区有互斥锁。
  • malloced chunk

A 表示是否是主分配区还是非主分配区,M表示是从 mmap 区域还是 heap 区域分配的,P 表示前面一个 chunk 是否在使用。p 为 0 时 prev_size 才有用

  • free chunk
  • Bins 。用户free掉的内存并不马上归还给系统,ptmalloc 会统一管理 heap 和 mmap映射区域的空闲的 chunk,ptmalloc 将相似大小的 chunk 用双向链表连接起来,一个链表被称为一个 bin。1 个 unsorted bin,2-64 small bins,同一 small bin 中的 chunk 具有相同的大小,两个相邻的 small bins 相差 8 bytes。

9月21号(天气☔️,心情良)

CTF特训营(268-)
  • IDAPython、Angr
  • 花指令
  • Linux常见反调试方法
    • 利用 ptrace,Linux 下的调试主要是通过 ptrace 系统调用实现,一个进程只能被一个程序跟踪,所以如果程序被跟踪之后再来调用 ptrace 自然不会成功
    • proc 文件系统检测,读取 /proc/self 目录下的部分文件,根据程序在调试和非调试状态下的区别来进行反调试。
    • 通过 getppid 系统调用获取得到程序的父进程,如果父进程是 gdb、strace 或者 ltrace ,则可以证明程序正在被调试。
  • 针对以上的方法反调试方法。常用的方法就是定位到反调试的代码,然后 patch
  • 加壳,加壳的程序真正的代码是加密存放在二进制文件中的,只有在执行时才从内存中解密还原出来,因此没法对加壳后的程序直接进行静态分析。
  • 控制流混淆,对于控制流混淆的程序通常采用 trace 的方法。通过 Trace 工具记录下程序运行的所有指令,然后在运行这些指令的基础上进行数据流分析。
  • 双进程保护,Debug Blocker。是一种在调试模式下运行自身程序的方法。这种保护通常存在两个进程,两个进程是调试器与被调试器的关系。由于真正的功能通常位于子进程中,所以要调试子进程,就必须先断开与已有调试器的链接。
  • 虚拟机保护,将代码翻译为机器和人都无法识别的一串伪代码字节流,在具体执行时再对这些伪代码进行逐一翻译、解释。用于翻译伪代码并具体执行的子程序称为虚拟机。对于一个虚拟机而言它定义了一套自己的指令集架构(ISA),包括寄存器集、内存和指令集。
  • C# Java 等解释型语言编译后会变成字节码,幸运的是,大多数字节码与源码存在对应关系,保留了很多信息,例如函数名、变量名。

3. Longest Substring Without Repeating Characters

难度中等

Given a string s, find the length of the longest substring without repeating characters.

Example 1:

1
2
3
Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.

Example 2:

1
2
3
Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

1
2
3
4
Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = ''
tep = ''

for i in s:
if i not in tep:
tep += i
else:
tep = tep[tep.index(i) + 1:]
tep += i
if len(tep) > len(ans):
ans = tep

return len(ans)
红蓝对抗中的近源渗透
  • 蓝军是攻击方,红军是防守方
  • 近源渗透定义为“指测试人员靠近或位于测试目标建筑内部,利用各类无线通信技术、物理接口和智能设备进行渗透测试的方法总称”。
正确的上网方式:软路由入门指南
  • “软路由”是特指将x86 PC或服务器通过特定软件实现路由功能。但本文的内容广泛一点。为了便于表达,我们暂且把所有可以运行自定义系统的路由器称为软路由吧。可以自行安装OpenWRT、DD-WRT的设备,我们都称为软路由。
  • 提起这个,您的第一反应可能是TP-Link、腾达、水星等品牌的家用路由器。它们有一个特点:路由器的系统是由厂商基于Vxworks等系统,自行开发的嵌入式系统。一般来说,只能使用原厂的系统,而且功能不多。腾达的路由,要刷个水星的系统,是不可能的。
  • 有这么一类操作系统,由社区开发维护,支持多种硬件平台。这些系统上的应用程序也可以算跨平台使用,而且应用程序非常丰富。著名的软路由系统有OpenWRT、潘多拉、梅林(午餐肉)、DD-WRT、Tomato,还有国内较为著名的iKuai等。
  • 刷机的方法,一言蔽之就是通过漏洞获得路由器 Root shell,然后解锁 Bootloader 区并且刷入。
9 月 28 日(天气阴,心情好)
从0开始聊聊自动化静态代码审计工具
  • 自动化代码审计重点在于漏报率与误报率

  • 动态代码审计工具(IAST),最常见的方法 Hook 恶意函数或是 api 并通过前端爬虫判别是否触发恶意函数来确实漏洞。

  • IAST 优点在于误报率比较低,缺点(1)爬虫难以保证对代码功能的覆盖率(2)对底层以及 hook 策略依赖较强(3)对环境的强依赖、对执行效率的需求、难以和业务代码结合

  • SAST-静态代码审计工具,最早期通过关键词正则匹配,一种高覆盖性-宁错杀不放过,典型 Seay,一种高可用性-宁放过不错杀,典型 Rips

  • 近代时期-基于 AST 的代码分析,关键词匹配因为代码开发人员的自由性而不能非常准确,代码不同但是编译器相同,语义分析库如下

  • 基于 IR/CFG 带有控制流的解决方案是更为主流的,因为 AST 更接近脑中的执行流程,

10月9日 (天气🌧️,心情愉悦✨)

美国网络风暴演习系列活动对我国网络安全工作的启示
  • 协调联动在应急响应中发挥着重要作用
  • 信息共享极为关键,对应急响应效果作用明显
  • 流程机制的完善与迭代是协同防御的重点

640?wx_fmt=jpeg

等保测评师角度浅谈等保2.0
  • 标准体系制定过程中受安全产品厂家影响较大
  • 标准制定水平较1.0差,重复检验太多、对应测评对象无法测评、缺少可操作性和实践性
10月12号(天气☔️,心情良)
leetcode
  • 双指针以及空间保存临时状态是非常经典的方法
  • 基础还是需要打牢
10月27号(天气🌞,心情良)
八大看点丨个人信息保护法草案如何捍卫个人信息安全
  • 适用范围更清晰
  • 职责分工更明确
  • 处理个人信息要先取得用户同意
  • 处理敏感信息限制更加严格
  • 突发公共卫生事件中个人信息保护
  • 强化个人信息保护责任和义务
  • 情节严重违法行为处罚可达 5000万
Gartner2020年十大安全项目详解
  • 远程员工安全(零信任网络访问技术)
  • 基于风险的弱点管理
  • 基于平台方式的检测与响应,特指扩展检测与响应(XDR)
  • 云安全配置管理
  • 简化云访问控制,特指云访问安全代理(CASB)技术
  • 基于 DMARC 协议的邮件安全防护
  • 无口令认证
  • 数据分类与保护
  • 员工胜任力评估
  • 安全风险评估与自动化
  • 1603356110_5f9145ce21d797bbc110b.png!small?1603356110687
  • 1603376370_5f9194f25fd917d8afbbd.png!small?1603376423921

1603376380_5f9194fcd752408d63077.png!small?1603376434426