当社の製品のユーザーに参加するより多くのユーザー、フロー増加します。高速なハードウェア投資機関の様々な空想に始まったあなた、灰色の領域の多くは、あなたのケーキの流れの一部を黒の手を狙っ始めています。このとき、ユーザ異常行動の保護のために、それはますます重要になるだろう。しかし、多くの場合、現実は常に残酷で、ビジネスニーズを行い、セキュリティ制御を持って拒否することはできません、特定のコスト管理のもと、人材への投資の選択肢は非常に困難になってきています。このようなシナリオでは、TJは以下のオープンソースプロジェクトをお勧めします。
- プロジェクト名:なじみのないストリートスタイル静的なルールエンジン制御システム
- GitHubの:https://github.com/momosecurity/aswan
アーキテクチャの紹介
背景の紹介
-
リストの管理
リスト型戦略の基本的なデータ管理機能を提供します。
ディメンションデータのリストが含まれます:ユーザーID、IP、デバイス番号、支払口座番号、電話番号を。フォローアップも、自分のニーズに応じて他の寸法に拡張することができます。
黒、白、グレーリスト:リストは、以下の3つのタイプが含まれています
プロジェクト管理を追加するプロジェクトのリスト - リスト(リストの範囲を決定するための)プロジェクトに所属している必要があり、あなたはリストを管理することができます。
-
リスト型戦略
記述子{パラメータ名:ラジオ、仮定"ユーザID"} {オペコード:/アウト}:{グローバル寸法:無線方向{}:{ラジオ、任意XX項目}黒/白/グレーリスト}
例:初期ブラックリスト内のユーザーIDのユーザー・アイテム
-
ブール戦略
{組み込み関数:ユーザ例外}:{はい/いいえオペコード}:{「アカウントID」を想定し、無線ディスクリプタ}例:ユーザーアカウントIDが異常閾値ブール型パラメータ名を渡しません
ブールパス閾値、記述子{パラメータ名:ラジオ、「アカウントID」を仮定} {オペコード:より大きい/より小さい/等しい/等しくない} {組み込み関数:履歴ログ番号} {しきい値:170}例:歴史的なアカウントのログインID番号が100より大きい
内置函数
何ですか?、唯一の要件を満たすために必要ないくつかのカスタム機能することを決定するためのロジックは、ブール値を返します。例えば、登録時間は、デバイスが現在使用機器であるか否かを、一定の範囲内です。 -
時間周波数制御戦略
描述符为 同一 {计数维度:单选,假设是“设备”} 在 {时段:时间跨度} 内限制 {阈值:整数N} 次 某动作 示例:同一设备一天内限制操作10次. 可是我怎么知道当前已经有多少次呢?这就需要上报,上报后将计数 详见第9条 数据源管理
-
限用户数型策略
描述符为 同一 {计数维度:单选,假设是“设备”} 在 {时段:时间跨度} 内限制 {阈值:整数N} 个用户
示例:同一设备当天限10个用户 此策略同样需要上报的数据,且由于与用户相关,因此上报数据中必须包含user_id字段(在数据源中需配置) 详见第9条 数据源管理
-
规则管理
管控原子:命中某条策略后的管控动作,比如拦截... 把上面2--5中所述的策略原子按照优先级组合起来,由上向下执行,直到命中某条策略,则返回对应策略的管控原子。此模块更多是重交互,完成策略的配置、组合、权重等等
-
日志管理
所有命中策略的日志均在此展示,也会包含审计相关的日志,
下一期会基于此日志,开放拦截溯源功能
。 -
权限配置
供权限设置使用,精确限定某个用户能看哪些页面的数据。 详见 其它 -- 权限管理。
-
数据源配置
示例策略:同一设备一天内限制登录1000次 那么每次登陆就需要上报一条数据,系统会分类计数,并分类存储。 存储的名字叫啥?就是此处要配置的数据源。对于此策略,只需要配置数据源,命名为login_uid, 字段包含uid, uid类型是string。然后程序就能根据uid为维度计数,并自动计算指定时间窗口内是否超出指定阈值。
重要:由于逻辑必然依赖时间信息,为通用且必需字段,timestamp为默认隐含字段,类型是时间戳(精确到秒,整数)
调用样例
-
调用查询服务
假设存在id为1的规则,则可以通过如下方式查询是否命中策略
curl 127.0.0.1:50000/query/ -X POST -d '{"rule_id": "1", "user_id": "10000"}' -H "Content-Type:application/json"
-
调用上报服务
假设存在名称为test的数据源, 且数据源含有的数据是: {"ip": "string", "user_id": "string", "uid": "string"}
curl 127.0.0.1:50000/report/ -X POST -d '{"source": "test", "user_id": "10000", "ip": "127.0.0.1", "uid": "abcabc112333222", "timestamp": 1559049606}' -H "Content-Type:application/json"
-
关于服务拆分
开源样例中,为了简化安装部署,查询和上报揉进了一个服务。实际场景中,显然读写应该分离。
1.可以直接此方式部署2份,域名不同,一份用于查询(上报接口不被访问),一份用于上报(查询接口不被访问),流量分发在nginx层完成
2.risk_server.py中修改配置URL_2_HANDLERS,选择您需要的服务接口部署
内置函数的扩展
-
不带阈值的内置函数扩展
以
是否异常用户
内置函数为例
代码见 aswan/buildin_funcs/sample.py 中的 is_abnormal 方法 -
带阈值的内置函数布尔型策略扩展
以
历史登录次数
内置函数为例
代码见 aswan/buildin_funcs/sample.py 中的 user_login_count 方法
注意:阈值计算不包含在内置函数中进行,控制流详见 aswan/buildin_funcs/base.py
其它
增加用户
考虑到企业用户大多数为域账户登录,因此推荐使用LDAP认证模块直接集成。但考虑到大家的场景不一样,因此也可以手动增加用户,样例代码如下:
# coding=utf-8
from django.contrib.auth.models import User
username = 'username'
password = 'password'
email = '[email protected]'
first_name = '测'
last_name = '试'
# 普通用户
User.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
# 管理员账户
User.objects.create_superuser(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
添加完成后,让用户登录,然后管理员配置权限即可。
权限管理
目前的权限模型包含如下元素,可在对应的页面进行配置。
具体图示如下:
配置相关
目前Django部分的配置均存放于 www/settings 目录,非Django部分的配置均位于 config 目录下。
为了在不同环境加载不同的配置,我们使用了RISK_ENV这个环境变量,系统在运行时会自动通过这个环境变量的值加载对应的配置文件。
この値が設定されていない場合、プロジェクトが始まっ容易にするために、システムはデフォルトの設定は、環境を開発ロードします。(Pythonのmanage.py試験)、RISK_ENVの値は、テストしなければならない場合、テストが実行されます。
過去の推奨
- 「コマンドラインアート」50000スターサミットGithubのトレンドリスト
- これらのプラグインのクロームタブ拡張あなたはそれを費やす必要が?
- Githubのは、あなたが読書のアーティファクトの側面をお勧めすることができます
- APIドキュメントコレクションツール:闊歩バトラー
- 会社コードが流出しましたか?〜を見つけるためにこのオープンソースプロジェクト
TJ 6月:もっと世間の注目の番号を見つけます