程序员与黑客
记录自余弦在qcon上的演讲
程序员与黑客(1)
防御就是提高攻击的成本
架构
思想一:黑客思维应该贯穿整个公司的业务[..->架构->研发->运维->..](理想状态技术团队每个人都有黑客思维)
思想二:优美的架构一定是健壮的
想象下生态系统
有漏洞/被黑很正常
快速自愈是关键
思想三:优美的架构一定是处处优美的(金刚狼)
...
文档(小注释,大系统,接替)
代码(代码龊漏洞也多)
逻辑(逻辑不能混乱)
人->团队(人是万恶之源)
思想四:安全的本质是信任(信任能)
[紧內聚,松耦合]设计思想
紧內聚->最小单元->一段逻辑代码(不是函数)
松耦合->分离->不信任任何输入
关键词:单元,分离
理解透了单元,才能知道分离的艺术(对象,各个属性,方法)
漏洞产生的本质
黑客通过输入[提交特殊数据],特殊数据在数据流的每个单元处理,如果某个单元没处理好,在单元输出的时候,就会出现单元的安全问题
例子:
操作系统层的单元,特殊数据当指令执行 ;rm -rf;
储存层,数据库SQL解析引擎把特殊数据当指令执行, 'union select user, pwd, 1, 2, from users--'
web容器层如nginx单元没处理好,可能产生远程溢出,DoS等安全问题
架构思想
分离的艺术
人员职权的分离
- 人是万恶之源
每个角色的职权应该清晰
保证[生态系统]可以稳定运行的基础上,尽可能限制目标角色的权限
小心内鬼或被内鬼
服务器的分离
研发与线上服务器分离
杜绝在线上调试
杜绝把不成熟的代码发布到线上
线上服务器各司其职
按业务分离
主站,子站等业务不一样
- 按服务器类型分离
web、数据库、缓存
例子:MYSQL数据库的分离:
配置绑定IP,10.1.1.10, 127.0.0.1, 0.0.0.0
最小单元原则,数据库授权we访问
杜绝infile/outfile等特殊权限的可能性(load data infile "/etc/pass' into table foo;select * from foo into outfile "...")
写恶意代码在web可执行目录下,是常见的
web与数据库服务器分离了会更好
帐号权限分离
*帐号权限和认证授权模型的关系
认证和授权的关系?
认证(1/0)授权(rwx)
- 认证方式
密码、公私匙、两次认证
认证授权部署一定要全面
- 如何安全登陆linux服务器
禁止密码的方式登陆
- 私钥文件丢了怎么办
私钥本身可以设置密码可以放在安全的加密磁盘(truecrypy)
人员离职要及时和删除公钥
服务器实在太关键:vpn到内网
文件目录分离
文件目录设计关键
命名风格要求
命名风格乱七八糟患处是看到也难意识到
目录各司其职&RWX权限分配好(能R就坚决不给WX)
代码分离
代码设计的关键
命名风格
紧內聚、松耦合(系统、包、文件、类、函数、逻辑代码)
线上不应该出现svn/git权限
能提交遍以后的文件就提交遍以后的(php config 配置)
Cookie分离
Cookie name(一看就要悲剧的isLogin)
Cookie value hack
和身份认证有关系的值是不是可以被预测
是否可以被获取
Cookie domain hack
HTTPS协议的wx.qq.com Cookie设置到.qq.com
关键Cookie: wxuin,wxsid
任意子域出现XSS都可以拿到这个CookieCookie path hack
没的防
- Cookie expires hack
过期时间,用户体验和安全做个平衡永不过起或过期算法有问题(会永久劫持)
- Cookie httponly hack
Cookie有这个信息就不能被Js获取bypass方式 如 phpinfo()信息,部署不完备
- Cookie secure hack
强制https传输,bypass方式 部署不完备
- 子域分离
子域设计的关键
不同业务放到不同子域下
- 松耦合的公共模块可以考虑放在其他域名下(参考google)
击破方式
proxy.html很多网站为了夸域方便就设置 document.domain='foo.com',设置后就可以跨子域
- crossdomain.xml文件,可以通过flash文件夸域获取
技术选型
第三方内容
前端框架
web应用
开发框架
语言
web容器
存储
操作系统
- 任何组件都有漏洞
越流行的开元组件越靠谱
越靠谱的团队打造的组件越靠谱
时刻做好被黑个头的准备
优美的架构重要性
分离设计大大提高入侵门槛
快速应急->快速自愈
千里之堤溃于蚁穴
- 程序员用不靠谱的组件、工具
模块/代码直接copy自不靠谱的地方
研发、运维工具下载自不靠谱的地方
升级中心的相关程序被植入后门
用靠谱的源
正确的md5校验(md5文件也可能被篡改)
绝大多数情况比较无奈
高保密机构不允许轻易升级
不要放在github上
邮箱hack
安全过程
黑客思维要贯穿(意识有限,经验培养)
优美的架构(少bug更少漏洞)
透彻理解:安全本质是信任(单元与分离重要性)
部署全面(否则形同虚设)
定期备份(出问题快速deff排查)
code review
响应争分夺秒(黄金24)
专业团队把脉
安全辅助工具
类型
工具清单
日志分析
splunk, logcheck, logwatch
入侵检测/防御
snort, iptables, ipfw, fail2ban, portsentry, tripwire, ossec
后面检测
rkhunter, chkrootkit, lynis
流量监控
nagios, cacti, zabbix
环境隔离
chroot
web抗D/CC
jiasule.com
关键字:安全
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!