资产管理平台
资产管理关键点在于:准确性、实时性、完整性这3个特性(可能不全,欢迎补充);
资产并非单一维度,自身具备了业务属性和安全属性;-- 何艺
资产分类
- IP&Host资产
- 域名资产
- 业务系统资产
- 权限资产:用户(第三方用户、后台系统用户)、用户权限、……
- ……
资产管理分类
- 黑盒资产管理
- 白盒资产管理
黑盒资产管理
域名资产
- 了解主域名信息;
- 从证书中获取域名信息;
- whois查询;
- 字典获取子域名;
'''
子域名存活性判断
'''
def domain_survivability(domain, tmp_file):
UA = {"user-agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
try:
response = requests.get(domain, verify=True, timeout=3, headers=UA)
tmp_file.write(response.url + '\n')
except Exception as e:
return
- DNS区域传输漏洞;
- 搜索引擎,搜索工具(shodan等);
- ASN:
whois -h whois.radb.net -- '-i origin AS111111' | grep -Eo "([0-9.]+){4}/[0-9]+" | uniq
nmap --script targets-asn --script-args targets-asn.asn=15169
IP&Host资产
- 直接获取
- 绕过CDN获取真实IP
-
IP存活性扫描:shodan
-
通过域名获取IP
'''
利用最简单的ping方式来获取,不能绕过CDN
'''
def exec_ping(domain,precision):
try:
result = os.popen("ping -c 1 %s -t 3 | grep -v PING" % domain) # 排除不能ping通的domain
text = result.read()
result.close()
ip = re.findall(r'\d+.\d+.\d+.\d+',text)[0]
print domain,
if precision == "yes":
precision_ip_attributes(ip)
else:
get_ip_attributes(ip)
except Exception as e:
pass
其它资产
- 基于扫描来进行;
- 人工进行梳理,然后实现自动化;
- 完整的用户权限管理系统;
白盒资产管理
云资产管理
- 阿里云资产管理
'''
从阿里云获取ECS信息
'''
def get_ip(result_file,clt):
result_file = open(result_file,'a')
for i in range(1,20):
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageNumber(i)
request.set_PageSize(10)
request.set_accept_format('json')
result = json.loads(clt.do_action_with_exception(request)).get('Instances').get('Instance')
# 如果result不为空就写入result_file,为空证明已经获取了所有的实例
if result:
for key in result:
InstanceId = key['InstanceId'] # 获取实例ID
Status = key['Status'] # 获取当前状态
PrivateIP = key['VpcAttributes']['PrivateIpAddress']['IpAddress'][0] # 私有IP
PublicIP = key['EipAddress']['IpAddress'] # 公有IP
SecurityGroup = key['InstanceName'] # 安全组
RegionId = key['RegionId'] # 地区
# Area = 'aliyun'
try:
result_file.writelines(InstanceId + '\t' + Status + '\t' + PrivateIP + '\t' +
PublicIP + '\t' + SecurityGroup + '\t' + RegionId + '\n')
except:
result_file.writelines(InstanceId + '\t' + Status + '\t' + PrivateIP + '\t' +
PublicIP + '\t' + '' + '\t' + RegionId +
'\n')
else:
pass
- 亚马逊云资产管理
'''
获取aws 云主机 ip
'''
def get_ip(result_file):
result_file = open(result_file,'a')
ec2 = boto3.resource('ec2','ap-southeast-1',aws_access_key_id = 'AK',
aws_secret_access_key = 'SK')
instances = ec2.instances.all()
for instance in instances:
if instance.public_ip_address == None:
result_file.writelines(instance.id + '\t' + ' ' + '\t' + instance.private_ip_address + '\n')
else:
result_file.writelines(instance.id + '\t' + instance.public_ip_address + '\t' + instance.private_ip_address + '\n')
云资产管理基本都是通过API进行管理。
通过CMDB系统进行获取
利用CMDB系统的API进行获取;
资产进行关联
- IP与域名资产的关联;
- IP与端口资产的关联;
- 域名系统权限资产的管理;
- 我们需要对安全的资产管理系统进行一个好的数据库设计方便数据关联查询;