webassembly学习-安全控制

一、为什么要提安全

学过编程的人都知道,代码的安全有两类:一类是代码本身编写的问题,比如内存访问越界,流控制等等;另外一种是代码执行期间的错误,同样有代码注入和劫持控制流等。而这些错误,轻则造成程序执行的异常,重则产生重大的社会问题。举一个例子,如果银行的服务程序被劫持,那么想想就不寒而栗。
黑客和白帽子都是做这个的,专门把这个当成了一个职业。看过一些相关书籍或者美国的电影的都可以看到,一些黑客是多么厉害,手指在键盘上敲几下,可能就进入了某个重要部门的内部数据库或者把银行中的钱转到了自己的帐户上。所以安全有很多类,但代码层次上是最基础的最本质的。
安全再怎么强调都不为过。

二、安全控制

常见的安全问题基本绕不过几块:
1、内存安全的问题
对变量的处理,首先是将固定范围的局部变量分配到指定的受保护堆栈中;对全局变量则增加了索引控制;而对于未明确固定范围的对象如指针等则保存在线性内存的用户可寻址空间,它在编译时单独分配空间并固定大小。从而对其的大小和边界进行控制,在未来可以进行更细粒度的如页、共享内存等的安全控制。
但是仍要看到,WASM并不是万能的,诸如一些注入攻击仍然没有解决。

2、控制流的安全问题
逻辑控制包括运行时的安全控制和代码注入中的控制流及运算符的管理。这些都是安全的基石,比如在if判断中,通过注入指定的逻辑来强制让正常的程序逻辑转向到非法的逻辑上去。而在WASM中,通过下面的手段来保护此类安全:
a 、函数调用必须指定与函数索引空间或 表索引空间中的有效条目相对应的目标 索引。
b 、间接函数调用在运行时接受类型签名检查;所选间接函数的类型签名必须与调用站点指定的类型签名相匹配。
c 、不受模块堆中缓冲区溢出影响的受保护调用堆栈可确保安全的函数返回。
d、分支必须指向封闭函数内的有效目的地。
换句话说,控制流安全就主要就是控制函数的调用和逻辑分支判断的安全性。

3、提供了陷阱保护
陷阱保护类似于事后补救机制,无论任何原因,当异常出现时,或者安全问题暴露后,如何尽最大可能降低事故的后果影响,这就是陷阱的意义。比如在C/c++中,一旦内存出现问题,基本上整个程序就挂了。而在实际的情况下,是不是可以避免出现这种问题并向监控发出友好的报警,都是一个重要的指标来判断语言的优劣。

三、、总结

大家在出行或者在生产工地附近经常看到:“安全重于泰山”,“安全也是生产力”等等类似的标语。这个完全可以复制到软件工程上来,比如谷歌和微软以及手机大佬苹果,几乎每年都要向白帽子支付巨额的奖励,用于劫持他们努力发向各种安全问题。最让大家记忆尤新的是去年某公司直接向国外提交了一个漏洞被通报的事儿,这说明安全也是国家的战斗力,是另外的一场无声的斗争。
解决安全问题,就是要从整体设计、逻辑设计、接口控制和层间通信这些最基础的地方做起,码农,码码看!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值