2018年4月16日星期一

API安全评估,你需要这样一份核查清单

本清单不仅适用于安全评估人员,也适用于API设计、测试和发布过程中的相关人员参考。

认证

  • 不要使用basic Auth(基本身份认证),使用standard auth(标准身份认证),比如JWT,OAuth;
  • 在身份认证、令牌生成、密码存储方面,不要重造轮子,使用标准的规范和方式;

JWT JSON Web Token

  • 使用随机的、复杂的密钥(JWT Secret)以抵抗对令牌的暴力破解攻击;
  • 不要从JWT的Payload部分提取算法信息,确保算法在后台(HS256 或 RS256);
  • 限制Token的过期时间(TTL, RTTL),越短越好;
  • 不要在JWT的Payload部分存储敏感信息,它很容易被解码(使用了base64编码);
  • 尽可能的使用HTTPS;

OAuth

  • 始终验证服务器端redirect_uri地址,可以采取白名单的方式进行控制;
  • 通过code而非tokens的方式进行信息交换(禁用response_type=token);
  • OAuth认证过程中,state参数中使用一个随机的哈希值,用于防御女CSRF攻击;
  • 定义默认范围,并验证每个应用程序的范围参数;

访问

  • 对请求进行限制(节流),以地方DDoS/暴力破解攻击;
  • 使用HTTPS,以避免MITM(中间人攻击);
  • 使用 HSTS,以避免 SSL Strip 攻击;

输入

  • 根据实际操作使用适当的HTTP方法,包括:GET (读取), POST (创建), PUT (替换/更新) 和DELETE (删除一条记录);
  • 验证请求接受头部(内容协商)中content-type的类型,只允许您支持的格式,例如application/xml , application/json等,如果不匹配,则返回 406 错误;
  • 验证POST请求中您接受的content-type的类型,例如 application/x-www-form-urlencoded , multipart/form-data ,application/json等;
  • 对用户输入进行验证,以避免常见的漏洞,如 XSS、SQL注入、远程代码执行等;
  • 不要在URL中使用任何敏感数据(凭据、密码、安全令牌或API密钥等),使用标准的Authorization header;

处理

  • 检测所有端点是否受身份验证保护,以避免有断裂口;
  • 应避免使用用户自己的资源ID号,比如,使用 /me/orders 替代 /user/654321/orders;
  • 禁止使用自增ID,可以使用UUID替代;
  • 解析 XML 文件时,取保实体解析被禁用,以避免 XXE注入攻击;
  • 使用CDN进行文件上传;
  • 如果需要处理海量数据,可以使用Workers 和 Queues的方式快速响应,以避免HTTP 阻塞;
  • 不要忘记关闭DEBUG模式;

输出

  • 响应头中,启用:X-Content-Type-Options: nosniff 策略;
  • 响应头中,启用:X-Frame-Options: deny策略;
  • 响应头中,启用:Content-Security-Policy: default-src‘none’ 策略;
  • 对响应的content-type类型进行限制,例如,若返回application/json,则 content-type 应为application/json;
  • 不要返回敏感信息,如凭据、密码、安全令牌等;
  • 根据完成的操作返回适当的状态码,如200 OK , 400 Bad Request , 401 Unauthorized, 405 Method Not Allowed等;
欢迎大家积极补充!
传送地址:https://github.com/shieldfy/API-Security-Checklist

via:http://mp.weixin.qq.com/s?__biz=MzIxMzQ3MzkwMQ==&mid=2247489531&idx=3&sn=809a990a8e4ca347dc87a3f7472f42d6&chksm=97b718f9a0c091ef321d38f5a62ca8d3c42fa6f53d64b18f237c5ad4526b7709598a248e7aa4&mpshare=1&scene=1&srcid=0416DTvVBVjvbrwmCoM1mQcU#rd

2018年4月4日星期三

某移动应用安全加固与脱壳技术研究与实例分析

由于近期很多朋友问关于Android加壳与脱壳技术,这两天我就对目前主流的脱壳工具和加壳方法做了研究,就对目前的脱壳方法做个汇总和方法记录。
首先目前市面上有很多的安卓脱壳工具,主流的有DexExtractor, ZjDroid, drizzleDumper,其中前面的2个工具与后面的工具略有不同,文章会一一对工具进行分析和尝试脱壳,各个工具的使用都在手机root的环境下进行的,并且在实体机上进行,所以如果有读者尝试破解的话建议还是在实体机上进行。
其实对于加壳的方案很多加固尝试都做了什么防动态调试等等措施,所以整体来讲,Android的加壳技术也提升了不少。对于工具DexExtractor, ZjDroid,主要基于hook的拦截系统加载的dex文件,然后直接从手机内存中dump出dex数据,然后直接把dex转化为jar即可看到客户端的源码。但工具drizzleDumper的脱壳原理略有不同把,这个工具主要原理是附加目标程序,寻找内存段,然后对dex的头部信息进行dump,此种方法可以获取到程序的比较完整的dex文件,但对于前两个工具,由于是hook拦截,所以可能拦截不全,造成了无法抓取完整的dex文件。
02 脱壳研究与测试
关于DexExtractor的脱壳原理网上已经有很多的文章,这里可以参考一个文章,原理写的比较详细:https://www.cnblogs.com/jiaoxiake/p/6818786.html
这个工具的使用和下载可以参照,https://github.com/lambdalang/DexExtractor,这个工具的使用环境实在太难弄了,之前好不容易弄到了系统的镜像,但还是没有脱壳成功,这里就不示范了,意义不大,有兴趣的可以研究一下。
      关于工具ZjDroid,这个工具网上也有很多的文章提到,也是目前大多数人用的工具,但笔者今天测试,发现ZjDroid有局限性,最新的壳可能无法脱。ZjDroid是基于hook的,所以使用需要xposed框架,在安装xposed框架需要注意一点,目前搜索到的xposed框架版本主要是3.0以上的,但xposed框架3.0以上的系统安装在Android4.0系统,否则可能安装不是,如果大家需要将xposed框架安装在Android4.0以上,那就需要安装xposed2.7一下的xposed版本了,笔者对这个也是做了多次尝试才弄清楚,所以今天笔者尝试的脱壳资源如下:
Android版本:Android4.1.2
应用名称:微恋交友(com.thsseek.welove_29.apk)
Xposed版本:de.robv.android.xposed.installer_v32_de4f0d.apk
ZjDroid版本:V1.0
手机权限:已root的实体机
壳类型:某数字免费壳
  在脱壳之前,我们首先用apktools的反编译IDE工具JEB尝试反编译,如下图所示:
从图中可以看到,核心代码一个也没有,只反编译出了壳代码,这里很明显是qihoo,即360的免费加壳,查看stub包,里面包含了加载加密资源的路径和方法:
其中的libjiagu就是核心资源文件,那这个文件在哪里呢,我们解压开apk程序就可以看到,如下图所示:
好了,既然无法直接利用apk的IDE工具直接反编译出核心源代码,那么就尝试脱壳吧。首先利用利用工具zjdroid。在xposed里面配置好模块就可以了,如下所示:
第一步:运行程序,如图所示开始运行目标程序:
第二步:手机连上电脑,打开手机调试模式,然后获取进程号:
adb shell dumpsys activity top|more
以上就获取到了目标程序的进程号和进程名:com.thsseek.welove 进程号:22886
第三步:查询dex信息所在的内存位置:
am broadcast -a com.zjdroid.invoke --ei  target 22886 --es cmd '{action:dump_dexinfo}'
第四步:监控logcat日志信息
logcat -s zjdroid-shell-  com.thsseek.welove
如图所示获取到apk的位置filepath:/mnt/asec/com.thsseek.welove-1/pkg.apk
第五步:重新开一个adb shell,然后执行一下命令:
am broadcast -a com.zjdroid.invoke --ei  target 22886 --es cmd '{action:backsmali, "dexpath":" /mnt/asec/com.thsseek.welove-1/pkg.apk  "}'
查看logcat窗口,发现已经dump dex数据:
导出dex数据/data/data/com.thsseek.welove/files/dexfile.dex,然后利用逆向助手,将dex文件转化为jar文件:
然后利用gd-gui查看代码:
可以看到,虽然我们dump了目标程序,并且成果获取到dex的数据,但是代码中还是壳的信息,并没有核心代码,这个问题其实主要还是因为hook的局限性吧,并不能正确的获取到dex的开头信息。
         接下来测试工具drizzleDumper,此工具有x86和非x86平台的,使用的时候按需使用。如图将drizzleDumper传到手机的tmp文件下面:
给drizzleDumper赋予777的权限:
接下来按照之前的方法,获取当前目标程序的进程号和包名:
dumpsys activity top |more
然后根据进程号看一下maps表:
Cat /proc/2886/maps|grep com.thsseek.welove
接下来运行脱壳程序进行脱壳,这里比较简单了,直接运行脱壳程序,参数就是进程名,如下:
./drizzleDumper  com.thsseek.welove
脱壳成功,并且将dex文件保存在/data/local/tmp/com.thsseek.welove_dumped_75.dex路径,我们导出文件:
然后对dex文件转化为jar反编译查看代码:
点击操作就完成了脱壳操作了:

03 总结
通过对3款Android应用的脱壳工具的测试,效果最好的就是drizzleDumper 了,但未测试收费的加壳服务不知道能不能脱壳,后面有机会再测试,脱壳过程主要是研究各个工具的使用,均是利用工具自动化方式来实现,后面有机会尝试手动脱壳测试。还有其他厂商的加固,如梆梆,腾讯,爱加密等,如果有兴趣也可以一一进行尝试。


via:https://www.secpulse.com/archives/70232.html

2018年4月1日星期日

无题-2018.4.1

你躺在床上,

右手大拇指机械地上下滑动,

精彩的画面,欢快的音乐……

抬头看了看时间和未完成的任务,

似乎感觉有些不妥,

于是,猛地删了自己一大嘴巴子,

妈的,刷抖音还分心!



壹——我们用笑声代替了思考,但我们却不知道自己为什么笑以及为什么不再思考。

当身边越来越多的同事跟我说,看了抖音等短视频,他发现他这一生过得太他么无聊了之后,我觉得事情似乎有那么一点不对劲了。

我承认,短视频、直播、手游可以使得都市生活轻松不少。因为现实生活中,我们背负的压力越来越大。

我们担心在打拼的城市里买不起房;我们担心自己的孩子去不了重点班;我们担心自己赚钱的速度跟不上父母老去的速度;我们担心自己还没有遇上对的人,却已经过了恋爱的年纪;

我们不得不从现实生活中,躲进了抖音、王者、吃鸡的娱乐世界里。

在短短的十几分钟甚至十几秒,我们就能获得久违的开心和欢愉。我们越来越开心,笑声越来越大,也越来越不会思考。娱乐至死的概率也越来越大。

慢慢的,娱乐至死的结局似乎也成了一种必然。

这让我想起了一个理论。

美国用来控制人民的“3S”理论:

Sex、Sports、Star


贰——我们的娱乐阈值越来越高。
年少时碰一下姑娘纤细的手指,也会脸红半天。然而,即使现在看着两具光溜溜的肉体交织缠绵,我可能也只是淡然一笑。

这就是阈值的含义。

我们迫切需要一种方式,一种在短时间内不需要思考就可以获得欢愉的方式。于是,短视频就出现了。我们难以抗拒这种娱乐带来的短暂的快感,就像在干涸的沙漠抗拒水分一样困难。

如果没有更刺激的画面和更挑逗的情绪,不能让我们更轻松更爽,根本看不下去。

事实上,持久地爱一个人,长期健身跑步,坚持读书思考,能给我们带来更大的正向愉悦感。

但是,我们等不及,嫌太慢了,太麻烦了。我们想要的“喜悦感”,现在就要,不想要思考。

久而久之,我们的愉悦感、成就感、仪式感会被一种单一的获得方式而替代。


叁——承认吧,我们变得越来越蠢。

泛娱乐化的内容开始填满我们的生活,我们的感官体验开始凌驾于逻辑思考之上。

我们越来越难以安静长久地坐在书桌前,持续地思考,去体验书里面每个句子的因果、对比、递进、反转、排列、深入逻辑关系。

我们越来越难以通过文字去想象“千里黄云白日曛,北风吹雁雪纷纷”的场景,脑海里只会想起“雪~~~花~~~飘飘”的抖音名曲。

我们越来越难以耐心地通过文字的描写,去体会男同学看到暗恋的女生穿着白色衬衫和蓝色学生裤向自己走来时,捏起衣角的不安。

抖音刺激的是你的神经,而不是你的大脑。极力献媚的物资、煽动的音乐、声泪俱下、说学逗唱娱乐方式,让你不需要思考却有深刻的印象。

我们就在这娱乐的温水里煮着、炖着,一点一点地失去思考能力。慢慢地我们发现,似乎有什么不对劲,也不愿意去想清楚了。

肆——碎片化信息让我们的知识体系变得支离破碎

如果把大脑比作一台电脑的硬件配置,那么知识体系就是操作系统。桌面上的一个个软件,就是我们的知识模块。各个软件之间,相互切换、连接,操作系统才会运行流畅。

然而,我们还没来得及搭建自己的知识体系,就已经被各处的碎片化信息塞得满满当当。各个软件之间,相互独立不兼容。只能知其然不知其所以然。

于是,我们的大脑成了装满碎片信息的垃圾桶。

我之前一直有收听罗振宇的知识付费节目。老罗把书中的内容分析的头头是道,我听得也是津津有味。久而久之,一种似乎懂了很多却又对知识运用不自信的感觉越来越强烈。

原来,阅读、思考、整理、归纳、总结、输出成节目这一系列的读书过程,是罗振宇完成的,而我并没有参与其中。我不需要思考,只需要记住就好。

我越来越敬佩那些人,晚上睡觉前,把手机放到一边,坐到书桌前,打开台灯,安静地翻页,安静地阅读,安静地思考,安静地发着光。


伍——你能看到这里,说明你还有得救

有没有一刻你发现,没有表情包,你不会聊天;有没有一刻你发现,想要夸赞小姐姐长得好看,却只能说一句666。

我知道这篇回答,失去分析和思考能力的人不会看到这里。所以,我希望坚持读到这里的你,能在将来“丰富精彩”但也只剩下“丰富精彩”的世界里,保持着独立的约束和思考。

我突然好怀念曾经去过冰岛的雷克雅未克教堂。

古老的洪钟、虔诚的神乐、划破天空的白鸽、绚烂的彩绘窗棂、栩栩如生的大理石浮雕,可爱的唱诗班的孩子们。

我行走的步伐开始变轻,我说话的声音开始变小,我的内心油然而生一种久违的感动和震撼。

via:https://www.zhihu.com/question/269807491/answer/355083601