本文目录一览:
区块链钱包安全吗?
近年来,数字钱包安全事件频发。
2019年11月19日,Ars Technica报道称两个加密货币钱包数据遭泄露,220万账户信息被盗。安全研究员Troy Hunt证实,被盗数据来自加密货币钱包GateHub和RuneScape机器人提供商EpicBot的账户。
这已经不是Gatehub第一次遭遇数据泄露了。据报道,去年6月,黑客入侵了大约100 个XRP Ledger钱包,导致近1000万美元的资金被盗。
2019年3月29日,Bithumb失窃事件闹得沸沸扬扬。据猜测,这次事件起因为Bithumb拥有的g4ydomrxhege帐户的私钥被黑客盗取。
随即,黑客将窃取的资金分散到各个交易所,包括火币,HitBTC,WB和EXmo。根据非官方数据和用户估计,Bithumb遭受的损失高达300万个EOS币(约1300万美元)和2000万个XRP币(约600万美元)以上。
由于数字货币的匿名性及去中心化,导致被盗资产在一定程度上难以追回。因此,钱包的安全性至关重要。
2020年8月9日,CertiK的安全工程师在DEF CON区块链安全大会上发表了演讲主题为:Exploit Insecure Crypto Wallet(加密钱包漏洞利用与分析)的主题报告,分享了对于加密钱包安全的见解。
加密钱包是一种帮助用户管理帐户和简化交易过程的应用程序。
有些区块链项目发布加密钱包应用程序来支持本链的发展——比如用于CertiK Chain的Deepwallet。
此外,还有像Shapeshift这样的公司,其构建了支持不同区块链协议的钱包。
从安全的角度来看,加密钱包最需重视的问题是防止攻击者窃取用户钱包的助记词和私钥等信息。
近一年来,CertiK技术团队对多个加密钱包进行了测试和研究,并在此分享针对基于软件不同类型的加密钱包进行安全评估的方法及流程。
加密钱包基础审计清单
要对一个应用程序进行评估,首先需要了解其工作原理→代码实现是否遵循最佳安全标准→如何对安全性不足的部分进行修正及提高。
CertiK技术团队针对加密钱包制作了一个基础审计清单,这份清单反映了所有形式的加密钱包应用(手机、web、扩展、桌面),尤其是手机和web钱包是如何生产和储存用户私钥的。
应用程序如何生成私钥?
应用程序如何以及在何处存储原始信息和私钥?
钱包连接到的是否是值得信任的区块链节点?
应用程序允许用户配置自定义区块链节点吗?如果允许,恶意区块链节点会对应用程序造成什么影响?
应用程序是否连接了中心化服务器?如果是,客户端应用会向服务器发送哪些信息?
应用程序是否要求用户设置一个安全性高的密码?
当用户试图访问敏感信息或转账时,应用程序是否要求二次验证?
应用程序是否使用了存在漏洞且可被攻击的第三方库?
有没有秘密(比如:API密钥,AWS凭证)在源代码存储库中泄漏?
有没有明显的不良代码实现(例如对密码学的错误理解)在程序源代码中出现?
应用服务器是否强制TLS连接?
手机钱包
相比于笔记本电脑,手机等移动设备更容易丢失或被盗。
在分析针对移动设备的威胁时,必须考虑攻击者可以直接访问用户设备的情况。
在评估过程中,如果攻击者获得访问用户设备的权限,或者用户设备感染恶意软件,我们需要设法识别导致账户和密码资产受损的潜在问题。
除了基础清单以外,以下是在评估手机钱包时要增加检查的审计类目:
应用程序是否警告用户不要对敏感数据进行截屏——在显示敏感数据时,安卓应用是否会阻止用户截屏?iOS应用是否警告用户不要对敏感数据进行截屏?
应用程序是否在后台截图中泄漏敏感信息?
应用程序是否检测设备是否越狱/root?
应用程序是否锁定后台服务器的证书?
应用程序是否在程序的log中记录了敏感信息?
应用程序是否包含配置错误的deeplink和intent,它们可被利用吗?
应用程序包是否混淆代码?
应用程序是否实现了反调试功能?
应用程序是否检查应用程序重新打包?
(iOS)储存在iOS Keychain中的数据是否具有足够安全的属性?
应用程序是否受到密钥链数据持久性的影响?
当用户输入敏感信息时,应用程序是否禁用自定义键盘?
应用程序是否安全使用“webview”来加载外部网站?
Web钱包
对于一个完全去中心化的钱包来说,Web应用程序逐渐成为不太受欢迎的选择。MyCrypto不允许用户在web应用程序中使用密钥库/助记词/私钥访问钱包,MyEtherWallet也同样建议用户不要这样做。
与在其他三种平台上运行的钱包相比,以web应用程序的形式对钱包进行钓鱼攻击相对来说更容易;如果攻击者入侵了web服务器,他可以通过向web页面注入恶意的JavaScript,轻松窃取用户的钱包信息。
然而,一个安全构建并经过彻底测试的web钱包依旧是用户管理其加密资产的不二之选。
除了上面常规的基础审计类目之外,我们在评估客户端web钱包时,还列出了以下需要审计的类目列表:
应用程序存在跨站点脚本XSS漏洞吗?
应用程序存在点击劫持漏洞吗?
应用程序有没有有效的Content Security Policy?
应用程序存在开放式重定向漏洞吗?
应用程序存在HTML注入漏洞吗?
现在网页钱包使用cookie的情况很少见,但如果有的话,应检查:
Cookie属性
跨站请求伪造(CSRF)
跨域资源共享(CORS)配置错误
该应用程序是否包含除基本钱包功能之外的其他功能? 这些功能存在可被利用的漏洞吗?
OWASP Top 10中未在上文提到的漏洞。
扩展钱包
Metamask是最有名和最常用的加密钱包之一,它以浏览器扩展的形式出现。
扩展钱包在内部的工作方式与web应用程序非常相似。
不同之处在于它包含被称为content script和background script的独特组件。
网站通过content script和background script传递事件或消息来与扩展页面进行交流。
在扩展钱包评估期间,最重要的事情之一就是测试一个恶意网站是否可以在未经用户同意的情况下读取或写入属于扩展钱包的数据。
除了基础清单以外,以下是在评估扩展钱包时要增加检查的审计类目:
扩展要求了哪些权限?
扩展应用如何决定哪个网站允许与扩展钱包进行交流?
扩展钱包如何与web页面交互?
恶意网站是否可以通过扩展中的漏洞来攻击扩展本身或浏览器中其他的页面?
恶意网站是否可以在未经用户同意的情况下读取或修改属于扩展的数据?
扩展钱包存在点击劫持漏洞吗?
扩展钱包(通常是background script)在处理消息之前是否已检查消息来源?
应用程序是否实现了有效的内容安全策略?
Electron桌面钱包
在编写了web应用程序的代码之后,为什么不用这些代码来建造一个Electron中桌面应用程序呢?
在以往测试过的桌面钱包中,大约80%的桌面钱包是基于Electron框架的。在测试基于Electron的桌面应用程序时,不仅要寻找web应用程序中可能存在的漏洞,还要检查Electron配置是否安全。
CertiK曾针对Electron的桌面应用程序漏洞进行了分析,你可以点击访问此文章了解详情。
以下是基于Electron的桌面钱包受评估时要增加检查的审计类目:
应用程序使用什么版本的Electron?
应用程序是否加载远程内容?
应用程序是否禁用“nodeIntegration”和“enableRemoteModule”?
应用程序是否启用了“contextisolation”, “sandbox” and “webSecurity”选项?
应用程序是否允许用户在同一窗口中从当前钱包页面跳转到任意的外部页面?
应用程序是否实现了有效的内容安全策略?
preload script是否包含可能被滥用的代码?
应用程序是否将用户输入直接传递到危险函数中(如“openExternal”)?
应用程序会使不安全的自定义协议吗?
服务器端漏洞检查列表
在我们测试过的加密钱包应用程序中,有一半以上是没有中心化服务器的,他们直接与区块链节点相连。
CertiK技术团队认为这是减少攻击面和保护用户隐私的方法。
但是,如果应用程序希望为客户提供除了帐户管理和令牌传输之外的更多功能,那么该应用程序可能需要一个带有数据库和服务器端代码的中心化服务器。
服务器端组件要测试的项目高度依赖于应用程序特性。
根据在研究以及与客户接触中发现的服务器端漏洞,我们编写了下文的漏洞检查表。当然,它并不包含所有可能产生的服务器端漏洞。
认证和授权
KYC及其有效性
竞赛条件
云端服务器配置错误
Web服务器配置错误
不安全的直接对象引用(IDOR)
服务端请求伪造(SSRF)
不安全的文件上传
任何类型的注入(SQL,命令,template)漏洞
任意文件读/写
业务逻辑错误
速率限制
拒绝服务
信息泄漏
总结
随着技术的发展,黑客们实施的欺诈和攻击手段也越来越多样化。
CertiK安全技术团队希望通过对加密钱包安全隐患的分享让用户更清楚的认识和了解数字货币钱包的安全性问题、提高警惕。
现阶段,许多开发团队对于安全的问题重视程度远远低于对于业务的重视程度,对自身的钱包产品并未做到足够的安全防护。通过分享加密钱包的安全审计类目,CertiK期望加密钱包项目方对于产品的安全标准拥有清晰的认知,从而促进产品安全升级,共同保护用户资产的安全性。
数字货币攻击是多技术维度的综合攻击,需要考虑到在数字货币管理流通过程中所有涉及到的应用安全,包括电脑硬件、区块链软件,钱包等区块链服务软件,智能合约等。
加密钱包需要重视对于潜在攻击方式的检测和监视,避免多次受到同一方式的攻击,并且加强数字货币账户安全保护方法,使用物理加密的离线冷存储(cold storage)来保存重要数字货币。除此之外,需要聘请专业的安全团队进行网络层面的测试,并通过远程模拟攻击来寻找漏洞。
网络安全需要学什么
网络安全是一个很广的方向,现在市场上比较火的岗位有:安全运维、渗透测试、web安全、逆向、安全开发、代码审计、安服类岗位等。根据岗位不同工作上需要的技术也有部分差异。
如果编程能力较好,建议可以从事web安全、逆向、代码审计、安全开发等岗位。如果对编程没兴趣,可以从事安全运维、渗透测试、web安全、网络安全架构等工作。
如果要学习全栈的安全工程师,那么建议学习路线如下:
1. 学习网络安全:路由交换技术、安全设备、学会怎么架构和配置一个企业网络安全架构
2. 学习系统安全:windows系统和Linux系统、如服务器的配置部署、安全加固、策略、权限、日志、灾备等。客户端的安全加固等
3. 学习渗透攻防:信息收集技术、社会工程学、端口检测、漏洞挖掘、漏洞验证,恶意代码、逆向、二进制等。
4. 学习web安全:sql注入、XSS、CSRF、上传漏洞、解析漏洞、逻辑漏洞、包含漏洞等挖掘及修复
5. 学习安全服务类:风险评估、等级保护、安全咨询、安全法律法规解读等
6. 学习CTF技术:有过CTF经验一定会是企业最喜欢的一类人才
零基础也可以学习的
如何成为前端工程师?
一、技术的必须的
作为一名最基础的前端工程师你必须掌握HTML、CSS和JavaScript。三者必须同时精通,类似我字样对前端知识一知半解的,一遇到问题就停下工作就四处搜索解决方案的,首先就算不上一个合格的前端人员。像我这样的如果当了前端工程师那工期肯定是不能保证的。合格的前端工程师第一要学会的就是在没有任何外来帮助的情况下(包括搜索引擎),能够完成大多数任务。
以下知识点是作为一个前端工程师必须了解和熟悉的:
DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
盒模型——外边距、内边距和边框之间的关系,IE 8中的盒模型有什么不同。
块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。
上述这些知识点都应该是你“想都不用想”就知道的东西。除了上述的前端知识,也还需学会至少一门后端编程语言,让你自己学会如何与后端进行更好的交互。
很多前端工程师对一些库非常的熟悉,jQuery,Bootstrap等,但是对于库的熟悉并不能提现你的优秀,整整优秀的是那些理解库背后的机制,特别是能够徒手写出一个自己的库的人。
真正合格的前端工程师是能实现具体的功能要求,而优秀的前端工程师需要解决的问题是寻找一个最优的解决方案。
二、沟通很重要
优秀的前端工程师需要具备良好的沟通能力,因为你的工作与很多人的工作息息相关。在任何情况下,前端工程师至少都要满足下列四类客户的需求。
产品经理——这些是负责策划应用程序的一群人。他们能够想象出怎样通过应用程序来满足用户需求,以及怎样通过他们设计的模式赚到钱(但愿如此)。一般来说,这些人追求的是丰富的功能。
UI设计师——这些人负责应用程序的视觉设计和交互模拟。他们关心的是用户对什么敏感、交互的一贯性以及整体的好用性。他们热衷于流畅靓丽但并不容易实现的用户界面。
项目经理——这些人负责实际地运行和维护应用程序。项目管理的主要关注点,无外乎正常运行时间——应用程序始终正常可用的时间、性能和截止日期。项目经理追求的目标往往是尽量保持事情的简单化,以及不在升级更新时引入新问题。
最终用户——当然是应用程序的主要消费者。尽管我们不会经常与最终用户打交道,但他们的反馈意见至关重要;没人想用的应用程序毫无价值。最终用户要求最多的就是对个人有用的功能,以及竞争性产品所具备的功能。
不要在没有作出评估之前就随便接受某项任务。你必须始终记住,一定先搞清楚别人到底想让你干什么,不能简单地接受“这个功能有问题”之类的大概其的说法。而且,你还要确切地知道这个功能或设计的真正意图何在。“加一个按钮”之类的任务并不总意味着你最后会加一个按钮。还可能意味着你会找产品经理,问一问这个按钮有什么用处,然后再找UI设计师一块探讨按钮是不是最佳的交互手段。要成为优秀的前端工程师,这种沟通至关重要。
那么,前端工程师应该最关注哪些人的意见呢?答案是所有这四类人。优秀的前端工程师必须知道如何平衡这四类人的需求和预期,然后在此基础上拿出最佳解决方案。由于前端工程师处于与这四类人沟通的交汇点上,因此其沟通能力的重要性不言而喻。如果一个非常酷的新功能因为会影响前端性能,必须删繁就简,你怎么跟产品经理解释?再比如,假设某个设计如果不改回原方案可能会给应用程序造成负面影响,你怎么才能说服UI设计师?作为前端工程师,你必须了解每一类人的想法从何而来,必须能拿出所有各方都能接受的解决方案。从某种意义上说,优秀的前端工程师就像是一位大使,需要时刻抱着外交官的心态来应对每一天的工作。
专业技术可能会引领你进入成为前端工程师的大门,但只有运用该技术创造的应用程序以及你跟他人并肩协同的能力,才会真正让你变得优秀。
三、提升无止境
优秀的前端工程师应该具备快速学习能力。推动Web发展的技术并不是静止不动的,这些技术几乎每天都在变化,如果没有快速学习能力,你就跟不上Web发展的步伐。你必须不断提升自己,不断学习新技术、新模式;仅仅依靠今天的知识无法适应未来。Web的明天与今天必将有天壤之别,而你的工作就是要搞清楚如何通过自己的Web应用程序来体现这种翻天覆地的变化。
四、前端开发知识架构
前端工程师
SVG/Canvas/VML
D3/Raphaël/DataV
知识管理/总结分享
沟通技巧/团队协作
需求管理/PM
交互设计/可用性/可访问性知识
编译原理
计算机网络
操作系统
算法原理
软件工程/软件测试原理
D2/WebRebuild
NodeParty/W3CTech/HTML5梦工厂
JSConf/沪JS(JSConf.cn)
QCon/Velocity/SDCC
JSConf/NodeConf
YDN/YUIConf
MongoDB/CouchDB
HTML5/CSS3
响应式设计
Zeptojs/iScroll
V5/Sencha Touch
PhoneGap
jQuery Mobile
CSRF/XSS
ADsafe/Caja/Sandbox
类库模块化
业务逻辑模块化
文件加载
CommonJS/AMD
YUI3模块
LABjs
SeaJS/Require.js
压缩合并
文档输出
项目构建工具
YUI Compressor
Google Clousure Complier
CleanCSS/UglifyJS
JSDoc
Dox/Doxmate
make/Ant
GYP
Grunt
Yeoman
数据结构
OOP/AOP
原型链/作用域链
闭包
函数式编程
设计模式
Javascript Tips
JSPerf
YSlow 35 rules
PageSpeed
HTTPWatch
DynaTrace’s Ajax
高性能JavaScript
HTTP1.1
ECMAScript3/5
W3C/DOM/BOM/XHTML/XML/JSON/JSONP
CommonJS/AMD
HTML5/CSS3
jQuery/Underscore/Mootools/Prototype.js
YUI3/Dojo/ExtJS
Backbone/KnockoutJS/Emberjs
Coding style
单元测试
自动化测试
JSLint/JSHint
CSSLint
Markup Validation Service
QUnit/Jasmine
Mocha/Should/Chai
WebDriver
IDE
调试工具
版本管理
VIM/Sublime Text2
Notepad++/EditPlus
WebStorm
Firebug/Firecookie
YSlow
IEDeveloperToolbar/IETester
Fiddler
Git/SVN
Github/Bitbucket/Google Code
HTML/HTML5
CSS/CSS3
PhotoShop/Paint.net
JavaScript/Node.js
JavaScript语言精粹
IE6/7/8/9
Firefox
Chrome/Safari/Opera
浏览器
编程语言
切页面
开发工具
代码质量
前端库/框架
前端标准/规范
性能
编程知识储备
部署流程
代码组织
安全
移动Web
JavaScript生态
前沿技术社区/会议
计算机知识储备
软技能
可视化
后端工程师
Unix/Linux/OS X/Windows
SQL
MySQL/MongoDB/Oracle
C/C++/Java/PHP/Ruby/Python/…
编程语言
数据库
操作系统
数据结构
参考链接:
JacksonTian/fks · GitHub
xss分辨率不能设置1020p怎么回事
因为你的显示器不是1020p。
xss在显卡性能在纸面参数上只有xsx的三分之一,甚至不如上个世代的天蝎座主机,这让很多玩家对xss的性能感到担心。从实际游戏表现来看,xss确实存在显卡性能上的短板,如《光环:无限》上分辨率就比天蝎座更低,天蝎座可以实现4k30帧的画质。
但是xss的目标分辨率是1080到2k之间,在这个区间段xss实现60帧没有问题,而天蝎座虽然显卡性能更高,但由于孱弱的cpu性能帧数并不稳定,而且xss在一些优化较好的游戏上画质表现已经和天蝎一致甚至超过。