js混淆,全球第三大审计公司Certik代码审计靠谱吗?
加密钱包安全审计你的钱包是否安全?

近年来,数字钱包安全事件频发。
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)来保存重要数字货币。除此之外,需要聘请专业的安全团队进行网络层面的测试,并通过远程模拟攻击来寻找漏洞。
耐克鞋标识别真伪方法?
耐克鞋标识别真伪在于质量的好坏。
正品鞋所有经过原厂加工并且带有原装盒子的鞋子,也就是和专卖店一样的货。
2。厂鞋原厂加工并由工人携带出来的鞋子,没有原装的盒子。
3。组装鞋使用原厂的材料,或是废料,在其他私人的工厂加工的鞋子。
4。假鞋分为精纺和低防,垃圾材料,垃圾做工。
5。A,B品鞋A品在意义上可以等同于厂鞋,但有的js拿来混淆视听,把组装也称为A品。
B品是在原厂加工时出现质量问题的鞋子,在鞋标上打上B,然后销毁。也能由工人拿出来,不过数量及其少。属于天上掉馅饼级。简单的真假鞋分辨,从鞋标上着手:每一个型号的NIKE鞋,都会有编配一组九个数位、独一无二的编号,我们只要从这九个数字,就能得知这双鞋的一些资料。
这九个数字的排列方法,是采用前六后三的排列法。前后组再以一横线隔开,如:830142-101前组分隔线后组
分享
为什么网上有人说WEB开发没技术含量?
前端开发四年多了,也听说了不少这样的话,每当听见这些话时,心里就只有一个念头:自己的技术还不行,太菜,让人抓住了把柄,成王败寇,胜者为王,败者借口。
自我认识有问题我们常常在业界看到有很大的薪资差异,拿3000和30000的人比比皆是,那为什么会有这么大的差异,差在哪里?
农村俗话说:跟上好人走好路,跟上死鬼跳家绳
●①差异是拿3000多的人旁边全是3000-5000的人,不管你问他啥,基本没有正能量的事,他们能说月薪30000没问题吗?不能,几乎给出的答案全是负能量,这样的人多了,回答也就多了,然后慢慢的就被同化了,进而导致大部分人随波浊流,自我放弃,失去了追求,切记远离这等人。
●②而有些人确切看到了拿30000的人,他们才不管那些拿3000人说的话,只会埋头苦干,不断打磨自己,把自己的技术做精,学更多的知识,只会越来越强,最后成为别人口中的大佬,收入自然很高,当然在你身边,这类人还是比较少,要向这类人学习。
●③自己本身就菜,井底之蛙不相信外面的天真的很大,他们自己就没搞清楚什么是web开发,说白了,他们就是那些干着日复一日的工作,就是切图,天天用着那点技术,难怪别人说前端就只会切图,其它的后台的人全办完了,你们还干啥?然而你去问问那些拿年薪的人,他们的答案是啥样,他们搞的绝不是切图这么简单。
全栈工程师想把前端的技能树点亮,那并非一件容易的事,如果全部点亮进阶到全栈工程师,那么你就是神一样的程序员,大厂招聘全栈工程师,最低薪资已经给到40W+。
【这个由前端延伸出来的行业,是现在最吃香的†】
全栈工程师熟悉多种语言,同事具备前后端开发能力,从需求分析到产品开发,测试,部署,发布流程都全部熟悉。
在著名的问答网站Quora上,有一个关于全栈工程师的高票回答:
全栈工程师是指,一个能处理数据库,服务器,系统工程和客户端所有工作的工程师,根据项目的不同,客户需要的可能是移动栈,web栈,或者原生应用程序栈。
●假如你是一个web开发者,如果你即能熟练的做前端,又能做后端,也能独自完成一个电子商务网站的产品开发,那你就算是全栈工程师了。
●换种方式说,全栈工程师的思维方式更开阔,更新颖,更综合。强大的学习能力体现在方方面面,并且不局限于特定的知识或技能。
全栈工程师需掌握的技能我收集了一线大厂招聘需求,归纳出web全栈开发需掌握的技能
PC、H5、Nodejs、小程序、移动端,掌握大前端所有技术栈能够实现类Element-ui组件库,设计Vue组件掌握Vue/React源码,MVVM库原理了解Koa2源码,定制MVC开发框架前端监控、性能优化、安全自动化测试、发布、运维以经典web开发体系,用Nodejs+JavaScript/css/html成为学习路线是我们前端开发人员走的路线。
这些你掌握了吗?以下是我们前端开发常用的技能,你掌握没?
●移动开发
ios app(oc/c++)Android app (java/c++)hybrid app(混合式移动应用)移动web(html5/js)●小程序来开发
●响应式网站开发
●浏览器兼容
就这些先问问那些说web开发没技术含量的人都熟练掌握了吗?
感谢您的阅读!
初学者如何自学UI?
UI还是比较容易学习的,我总结了一套教程,如果按照这套教程学习的话,一定会从入门到精通。
UI学习思维导图:
第一阶段
推荐视频:PS精品教程视频:http://pan.baidu.com/s/1c17doVu
第二阶段
推荐视频手绘教程:http://pan.baidu.com/s/1pKY1WuR
第三阶段:
推荐视频ai教程视频:http://pan.baidu.com/s/1kUNKcmj
第四阶段
UI设计视频教程 http://pan.baidu.com/s/1o8TmLyM电商设计实战:http://pan.baidu.com/s/1c0CaXC电商广告创意设计视频教程 http://pan.baidu.com/s/1dFvFl1v
第五阶段
AE视频教程:http://pan.baidu.com/s/1mh6hJ7a
第六阶段:
WEB前端视频教程:http://pan.baidu.com/s/1eSecg5W绿色食品网整站制作项目:http://pan.baidu.com/s/1dFDWdR7JavaScript & jQuery精品教程:http://pan.baidu.com/s/1hr8XHSo响应式网页制作:http://pan.baidu.com/s/1bp8Ir2R
Java的学习优势有哪些?
一、先来回答java的前景,从以下几点进行分析:
1,市场:
首先java有非常广泛的应用市场,它的生态系统几乎涵盖了目前市面上所有的软硬件,java几乎是万能的,你能想到的,java基本都能实现(虽然吹的有点大,但不可否认)。
web开发:
能做大型的互联网网站如,京东,淘宝,人人网、去哪儿网、美团等。
java在开发高访问、高并发、集群化的大型网站方面有很大的优势。
移动端开发:
目前手机上所有的APP后台代码及部分移动端页面java是都能够做到的。
客户端开发:
主要面向政府、事业单位和大型企业,如医疗、学校、OA、邮箱、投票、金融、考试、物流、矿山等信息方面的系统。这些应用在我们生活中其实随处可见,比如医院的挂号系统、公司的打卡系统、物流系统等。
2,需求
从当前最新boss招聘来看java的需求量是非常大的,但是这个需求是有前提条件的,那么必须是开发3年以上的开发工程师,有人说java已经饱和了,饱和只是针对那些刚学java不久没有任何开发经验的工程师而言的,是不是说初学者就找不到java开发的相关工作了,NO!有实习岗位。
这只是针对一线城市而言,相对于二三线城市来说对于实际开发经验是稍微的放松的。
3,稳定
第一个问题已经说过了,java是有一个庞大的生态系统,它的覆盖范围非常广,而且已经连续10几年位居开发语言的榜首,所以java是相对于其他语言来说,非常稳定的。
二、接下来说说java好不好自学?
自学需要克服一下几点,如果能按照自己的规划的去学习成功的几率会更大。
1, 惰性:很大一部分人学习都是一时想到了才去学习的,但是能坚持下来应该没有几个,一开始可能兴趣很高,前几天还在坚持学习,但是后面的时间就慢慢的坚持不下去了,最后干脆就扔掉了。
2, 急于求成:在线看视频可以让你很快的学完整个课程,但是回头想想,学习之后的效果又是如何呢?可能只是看视频,而没有动手去写代码,这样学习的成果几乎是0.
3, 没有时间或者压力大:没有时间可能你还在上班或者你在干别的事情给自己找的一个借口,时间不是没有而是你有没有利用起来,现在是互联网时间,想要学习真的很容易的,可以利用自己碎片化的时间去学习,比如坐公交或者坐地铁,这样你有一大把的时间去学习,就看你能不能利用起来。压力大可能是因为你目前收入已经不满足你的消费了,所以觉得压力大,想找个薪资高的来弥补,但是想法是好的,你得去做,一步一步的去做。
三、最后附上java学习路线
1、java基本语法(1 编写 HelloWorld、2 常量、3 变量、4 数据类型、5 运算符、6 方法、7 流程控制语句、8 IDEA使用:目前企业使用最多开发工具、9 数组)
2、面向对象(1 类、2 对象、3 封装、继承、多态、4 构造器、5super、this、6 接口、抽象类、7 权限修饰符、8 内部类、9 Random、ArrayList、String、Arrays、Math)
3、API(常用API:1 Date、2 DateFormat、3 Calendar、4 System、5 StringBuilde)
4、集合(1 Collection、2 泛型、3 List、4 Set、5 Collections、6 Map、7 HashMap)
5、异常(1 异常体系、2 异常分类、3 声明抛出捕获异常、4 自定义异常)
6、多线程(1 线程概念、2 线程同步、3 Lock、4 线程生命周期、5 线程池)
7、Lambda表达式(1 函数式思想概述、2 Lambda标准格式、3 Lambda语法与注意事项)
8、IO流(1 文件、2 字节流、字符流、3 转换流、高效流)
9、网络编程(1 网络编程三要素、2 Socket原理机制、3 UDP传输、4 TCP传输)
10、数据库(1 mysql、2 jdbc、3 连接池、4 JdbcTemplate )
11、前端技术(1 html5、2 css、3 javascript、4 bootstrap)
12、linux(1 linux安装、2 目录操作、3 文件操作、4 网络操作等)
13、nginx( nginx安装、配置、部署)
14、xml与(1 xml基本语法、2 约束)
15、jsonp( 1 jsoup概述、2 jsoup作用使用、3 xpath)
16、Servlet(1 tomcat、2 request、response、3 cookie、session、4 jsp、el、jstl、Filter)
17、web异步开发(1 jquery3、2 ajax、3 json)
18、redis(1 nosql介绍、2 redis数据类型、3 常用命令、4 jedis)
19、maven(1 maven概念与作用、2 idea集成maven、3 maven常用命令、4 依赖管理)
20、spring(1 spring体系结构、2 spring配置、3 bean管理、 4 IOC/DI、AOP、5 事务管理、6 spring5新特性 )
21、spring mvc(1 springmvc概述、2 控制器、3 常用注解、4 参数绑定、5 json数据交换、6 resutful、7 拦截器、8 文件上传、9 异常处理)
22、mybatis(1 自定义mybatis框架、2 mybatis入门、3 架构分析、4 常用API、5 配置与事务管理、6 mapper代理、7 数据封装、8 动态sql、9 关联查询、10 性能优化、11 查询缓存、12 SSM整合)
23、拓展(1 Oracle、2 springboot、3、spring data jpa、4 springcloud、5 vue.js 、6 分布式服务、7 中间件 、8 高并发 、9 微服务技术 等等)
以上路线2-4月就可以学完,如需要定制学习路线请关注,私信我。
-----------------------------更新------------------------------------
最近大家最大的问题就是说2-4个月是否能学完的问题。我在评论中说2个月每天需要花费8个小时,4个月每天需要花费4小时。
这么说不是没有依据,反对可以,客观的分析就行了,没必要言语过激,你说2个月每天花费8个小时或者4个月每天花费4个小时学不完,即使学完了也达不到效果,那只是你没有正确的学习方法,没有掌握好的学习方式,没有掌握开发语言应该怎么去学,而是和学习其他知识一样的方法去学习开发,当然你是学不会的,所以不要妄自评价。


还没有评论,来说两句吧...