2022年6月,顶象防御云业务安全情报中心监测到,某NFT平台促销活动中同时遭遇“刷量”和“薅羊毛”双重业务欺诈。
基于编号为BSI-2022-140和BSI-2022-143的两份业务安全情报显示:黑灰产首先为不符合标准的NFT平台用户做刷榜刷量推广,帮助其快速获得平台奖励。然后利用刷量的账号,哄抢NFT平台发行的数字藏品,再通过社群论坛低价转售。由此给该NFT平台造成数千万元的经济损失。
NFT是什么?有什么价值?
NFT的全称是Non-Fungible Tokens,常翻译为“非同质化通证”。最早诞生于2017年区块链游戏“加密猫”,本质上是基于数字货币的智能合约。作为区块链的一个条目,在区款链的技术和相关协议下,NFT拥有唯一编码,有加密性、唯一性等独特性。
在物理世界里的一幅作品、一张照片、一个视频,创作者只能赠予或售卖一次。后续再有二次、三次甚至多次的交易都与创作者无关。但NFT世界里的作品,可以根据创作者的需求,自定义作品的数量。无论创作的是文字、音乐、视频、图片还是绘画,都可以通过NFT平台进行铸造交易。所谓铸造就是把作品进区块链加密,使之成为独一无二的、特定资产的所有权。
2021年是NFT大火的一年,被大家广为所知是在2021年。这一年的9月,杭州2022年亚运会发布了限量20000份的 NFT “数字火炬”。在短短几天后,数字火炬的身价直接翻了几百倍。
东方证券一项数据显示,2021年1月至8月,OpenSea(全球最大 NFT 交易平台)的NFT交易金额超过10亿美元,占全球NFT交易规模的98.3%。而在2020年,该平台的交易额不足2000万美元。
NFT的应用场景很多,艺术作品、收藏品、时尚娱乐、游戏内物品,还有体育竞技、身份验证、保险、电子门票等,但是最广为人知的是数字艺术和游戏。每件艺术品都可以通过NFT的形式呈现,不仅保护版权,更可以验证购买艺术品的真实性。在元宇宙加持下的游戏,能够通过NFT记录玩家在游戏内物武器、装备、角色等,确保物品交换、交易、获取时的真实性。同时,NFT良好实现了实物的数字资产化,对数字艺术更好的定价与流通。
国内希望NFT作为一种去金融化的数字藏品,仅保留其收藏功能,禁止二次交易。2022年4月,中国互联网金融协会、中国银行业协会、中国证券业协会联合发布了《关于防范NFT相关金融风险的倡议》,对 NFT 所具有的价值和潜力做出了肯定,表明协会推动NFT向合规化发展的愿景。同时明确防范金融风险仍是NFT监管的重点,杜绝 NFT 金融化证券化的倾向。
NFT平台活动,黑灰产“一鱼两吃”
某NFT平台与多个名家合作数字藏品,很多作品是创世首发,藏品未来升值空间较大。为了扩大藏家规模,提升平台知名度,该平台开启新一轮推广活动,达到推广任务量或吸引到 一定新注册的用户,就能够获得三重奖励:一重奖励是增加免费抽奖的次数,可以免费领取限量首发的数字藏品;二重奖励能够获取珍贵藏品创世首发的优先购买权;三重奖励能够获得合作电商平台、店铺等的无门槛代金券,购买数字藏品时可直接抵扣。
为了快速达到推广量,一部分用户通过电商、论坛、IM等方式主动联系到黑灰产,付费帮助其伪造投票量和新用户注册量,然后领取NFT平台的奖励。
在为部分NFT平台用户提供刷榜刷量、作弊推广、赚取服务费的过程中,黑灰产迅速熟悉了该平台的各项规则,同时发现该NFT领域平台活动防护门槛较低,营销反作弊意识薄弱,未部署专业的业务安全体系,可以说近乎裸奔。
于是,黑灰产借机注册大量虚假账号,哄抢平台上首发、稀缺、珍贵的数字藏品。然后通过电商平台折价出售。


不同场景不用手法,黑灰产几种欺诈手段
顶象防御云业务安全情报中心分析发现,黑灰产在NFT平台不同场景下采用了不同技术工具。
在注册场景:黑灰产通过接码平台、打码平台、代理IP、脚本软件等作弊工具,实现批量自动化账号注册。
在投票场景:黑灰产使用“秒拨”客户端软件,进行简单配置后,就可以实现自动变换IP地址,以规避平台的IP频次限制安全策略,实现对某一选项的海量投票刷榜。
在交易场景:黑灰产通过群控软件,操控大量账号,短时间内完成指定商品的抢购。

黑灰产半夜最疯狂,IP代理地址很集中
基于黑灰产活动信息,顶象防御云业务安全情报中心分析发现:黑灰产在深夜0点至早上6点活动频繁,尤其深夜异常活跃。

基于NFT平台验证请求的活跃IP数据分析发现,黑灰产主要使用河北衡水、江苏扬州、吉林通化、江苏泰州等地代理IP地址。同时,发现大量登录账号拖动轨迹明显异常,且使用模拟器特征。

顶象防御云业务安全情报中心分析,NFT平台被访问页面的来源IP地址聚集特征明显,多数IP地址被识别为“秒拨IP”。

顶象防御云业务安全情报中心还发现,黑灰产访问频次聚集明显,单个设备24小时内内访问频次高达51.8万次,是非常明显的机刷行为。

此外,顶象防御云业务安全情报中心统计显示,绝大部分请求来源href为本地搭建工具:http://localhost/xxxx/xx/。
防御云的防控建议
基于NFT行业特征以及风险态势分析,顶象防御云业务安全情报中心建议NFT平台在事前防御、事中识别、事后处置的安全体系,以有效防各类欺诈行为,保障业务健康运行。
事前全链路防控
保障客户端安全:NFT平台的APP和网页,可以分别部署端加固及H5混淆防护,以保障客户端安全。
提前环境检测安全:客户端集成安全SDK以后,定期对App的运行环境进行检测,检查是否有代码注入、hook、模拟器、云手机、调试、代理、VPN、root、越狱等风险。
保障通讯传输安全:业务的通信传输中,黑灰产可能会篡改通信报文中的一些数据,通过对前端SDK进行加固,在通讯链路采用国密算法进行加密,防止终端安全检测模块的数据被篡改和冒用。
事中风险识别和拦截
多场景下人机安全验证:在注册、登录、抽奖、抢购等业务场景下部署顶象无感验证,有效识别机器行为,拦截垃圾注册、批量登录。
结合手机号黑名单识别注册登录风险:黑灰产会使用虚拟号段、连号手机号以及没有任何号段特征的黑产小号来注册,通过风险手机号有效识别风险号码。
结合IP黑名单识别刷票风险:黑灰产刷票时,会采用IP代理池进行“机刷”,IP风险库能够有效识别恶意IP地址。
结合决策引擎实现实时防控:接入实时决引擎,基于业务数据和风险数据,制定不同安全策略,快速有效识别并拦截注册、登录、抢购等场景欺诈行为及营销作弊行为。其中风控维度建议:
1、设备终端运行环境:设备指纹ID是否合法、端是否有注入、调试、模拟器、VPN、代理等特征,通常营销作弊设备大多具备以上特征。
2、多场景行为检测:设备使用限制,如限制多账号使用同一设备注册,多账号使用同一设备登录、账号对应的设备经常变化、IP短时间高频访问等行为维度检测。
3、风险库名单:基于风控数据、历史打卡数据,沉淀并维护对应黑白名单数据,包括用户ID、手机号、设备黑名单等。
4、外部数据服务:对接手机号风险评分、IP风险库等;
5、数据模型:业务据有一定积累以后,通过风控数据以及业务的沉淀数据,对用户行为进行建模,模型的输出可以直接在风控策略中使用。
事后风险处置
根据业务实际需求,顶象防御云业务安全情报中心提供两种处置建议。
1、风险数据打标。注册、登录场景识别风险后先不实时反馈结果给用户,先沉淀风险名单,供抽奖、抢购场景调用。如在抽奖场景将风险名单设置为黑名单,给用户返回未抽中,或直接发价值不高的普惠奖。
2、线上实时反馈。对识别为风险的请求进行实时拦截,直接显示请求成功或者失败,恶意行为用户直接冻结账号。
基于处置建议,顶象防御云业务安全情报中心提供两个技术解决方案。
1、顶设备指纹+决策引擎:设备指纹可以针对端上风险进行识别,例如注入、模拟器、调试等,配合决策引擎使用,可以实时发现风险并给予处置。
2、业务安全感知(移动版):安全感知可以识别发现移动端风险,不仅可以覆盖设备指纹产品发现的风险,而且无需决策引擎,可以直接对移动端风险进行处置,但与设备指纹+决策引擎组合的区别在于安全感知无法使用业务字段,只防控移动端层面风险。
业务安全情报中心是顶象防御云的集成服务。顶象防御云集成业务感知防御平台、验证码、设备指纹和端加固等产品,以及业务安全情报、云策略等服务,拥有丰富的技术工具、数万个安全策略及数百个业务场景解决方案,具有情报、感知、分析、策略、防护、处置的能力,提供模块化配置和弹性扩容,助企业快速、高效、低成本构建自主可控的业务安全体系。
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)
有人知道如何将capybarapoltergeist的用户代理覆盖到移动用户代理以进行测试吗?我发现了一些有关为seleniumwebdriver配置它的信息:http://blog.plataformatec.com.br/2011/03/configuring-user-agents-with-capybara-selenium-webdriver/这在capybara闹鬼中怎么可能? 最佳答案 请参阅poltergeistgithub页面上的链接:https://github.com/teampoltergeist/polte
A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(
我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status
我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow