
sanity check on packet
由 droplet 在 周五, 2010-02-05 10:12 提交 技术看点检查packet是否符合规范对gateway和endpoint来说都很重要。但也有些协议里面没有规定的或者比较模糊的地方,检查起来就比较麻烦,因为不同的实现有不同的解释。
比如对tcp packet的检查。第一个packet里面,除了SYN之外,还有ACK flag,算是合法还是非法?这个是否需要检查。比如只有FIN flag是否合法。比如有FIN/RST是否合法。这些协议里面没有定义的东西,就需要case by case的去解决。
sanity check是安全的第一道防线,需要对协议有足够的理解才能把它做好。

attack connection with icmp error message
由 droplet 在 周五, 2010-02-05 10:11 提交 技术看点ICMP总的来说有两种类型的message:
1) ICMP request/reply,一般用于获取对端的信息。
2)ICMP error message,是网关或者对端在出错的时候,回复给client的信息。
Firewall对ICMP request/reply的处理,一般是只允许request创建session,而reply删除session;而不会允许reply创建session。没有session,也就意味着drop。
而对ICMP error message的处理,最简单的,是允许全过。稍微复杂的,需要用embed payload去匹配session。有些ICMP error message可以会删除session,比如DEST UNREABLE错误。但是在删除session,需要检查这个message是不是针对第一个包的,如果是,则可以删除,如果不是,就不能删除。否则的话,可能会导致误删。用ICMP error message也是攻击firewall的一种方法。
如果有NAT,就更麻烦一点。ICMP header和embed payload都需要做NAT,也需要重新计算checksum。这样很容易造成DoS攻击。
所以对ICMP error message应该有一个限制,每秒,每个session上能处理几个ICMP error message是有限制的,多余的都必须drop。这样才能保证firewall本身的安全。

something about cpu cache
由 droplet 在 周五, 2010-02-05 10:11 提交 技术看点cache是一个很大的话题,这么我们只关注cpu与memory之间的cache,这包括:
I-cache, D-cache, TLB cache, BTB, L2 cache, L3 cache等等。
I-cache指令cache, D-cache是数据cache, 它们属于L1 cache。BTB是CPU cache的分支预测的结果,在不同的CPU里面,名字可能不一样。TLB cache是MMU的cache,一般容量较小。L2 cache包括指令和数据,只衡量cache的一个重要指标。
CPU Cache Memory
考虑一下,CPU如何读数据? 有两种方式,一是先读cache里面的内容,如果cache里面没有,再从memory里面读;或者是同时从cache和memory里面读,如果cache里面有的话,就会先命中cache里面的内容,否则的话,就从memory里面读,同时也可以更新cache里的内容。
考虑一下,CPU如何写数据? 也有两种方式,一是先更新cache里面的内容,然后在cache被替换或者是清除时,把修改的内容写入memory; 或者是直接写cache和memory,这样就不会存在cache和memory不一致的情况。
cache一般是以cache line大小分割成很多个小块, cache line的大小一般是16 bytes或者是32 bytes。把memory里面的内容load到cache里面时,一般一次会load一个cache line大小的内容。所以一般会要求数据结构是cache line对齐的,这样有避免cache line被频繁地更新。
Memory对应的cache的地址用这个公式得出:
cache address = memory address % cache size
cache的容量比memory小,一次不能把所有的memory都load到内存里面。所以,cache的大小就是一个很重要的指标,越大,能够cache的数据就越多。写程序也要注意把关联的内容放到一下,这样可以全部在cache里面操作,对程序性能很有帮助。
从memory到cache的映射,还有一个概念就是association(关联)。1-way association的映射,每个memory地址映射到cache里面的地址是固定的。如果是full association,memory可以映射到cache的任何地址上。1-way比较简单,但是cache会被频繁的被替换;full way太复杂的,实现成本高,所以一般只用于容量比较小的cache,比如TLB cache。一个折衷就是用N-way,比如8-way。这种情况下,cache划分成set大小的块,每个set里面包含8个cache line。同一时刻,映射到同一cache地址的memory address,可以有8个,超过8个,就需要替换。
cache的难点在于,查找和替换。如何判断一个memory address在cache里面,如果是1-way,只有一种可能,判断起来比较方便;如果是8-way,需要比较8次;如果是full association,需要比较N次,一般需要并行的比较硬件,成本较高。
映射到同一cache 地址的memory之间存在碰撞,8-way的cache能够容纳8个不同的memory地址,多于8个就需要替换。所以在设计数据结构时,需要考虑如何把数据结构分散的不同的cache line里面。如果映射到同一个cache line,在访问时就会存在碰撞,不能很好的利用cache的性能。SLAB里面color的作用就是把object分散到不同的cache line里面,避免碰撞。
cache是每一个程序员需要注意的问题,因为cache的利用率对程序性能影响很大。

connection limitation
由 droplet 在 周五, 2010-02-05 10:09 提交 技术看点connection limitation 是不是一个抵御攻击的好方法哪?从企业出口来说,限制connection可以防止一个用户,或者ip消耗了所有的connection,导致其他人无法出去。这有点像QoS的做法。但是对入口来说,限制某个source的connection,可能会导致误伤,因为很多ip都是NAT出来的。如果能够检测source ip是否经过了NAT,就可以对这个ip地址的限制放大一点。如何检测NAT?听说有通过ipid来检测的,不知道好使不好使。
ip based connection limit和policy based connection limit都有一定的用处,但是要看使用的环境和用法。并不是任何时候都要用到这个feature。用错了,会搞出来意想不到的问题。

最新评论
1周 6 天 前
1周 6 天 前
2 周 22 小时 前
2 周 22 小时 前
5 周 1天 前
5 周 5 天 前
6 周 22 小时 前
6 周 4 天 前
7 周 2 天 前
7 周 3 天 前