【云端安全小建议】-如何正确的使用云审计

前言

云端安全小建议的系列文章,是由腾讯云账号与权限团队的一线开发人员推出的关于用户安全的小建议。该系列文章旨在帮助腾讯云用户能够充分利用腾讯云提供的产品特性,安全的解决自己在实际生产中的遇到的问题。文章中会提到很多应用场景以及错误的解决方法和正确的安全的解决方法。该系列文章不仅会有场景分析还会有技术分析,所以只要是腾讯云的用户,无论是技术小白用户还是技术大神都可以一起来讨论和实践。对于用户提出的安全问题,我们会第一时间跟进,站在平台方的角度给出安全合理的解决方案。

应该怎么充分利用云审计来监控账户的安全呢?

假如我们的目的是:监控自己的账号是否在不是特定的IP发生过登录,如果是则及时告警。那么我们肯定会有以下疑问。

  • 云审计提供的日志格式是什么样的?
  • 这样的日志里哪个字段可以标识登录,换句话说登录对应的日志是那一条?
  • IP又是哪个字段标识?
  • 怎么检索这个日志?
  • 要是真的检索到了异常操作怎么及时通知到我啊?

现在怀着一脸懵逼的心情来探索一下,如何实现使用云审计实时监控腾讯云账户。

首先,云审计的日志格式是什么样的?

啥也不说,先上个审计日志的例子,然后再给出每个字段的详细含义。以下便是审计日志的一条登录日志的实例。出于安全的考虑,我把账号还有IP做了打码操作。

{
    "userIdentity": {
        "type": "Root",//账号类型
        "principalId": "1150xxxxxx",//当前操作账号ID
        "accountId": 1150xxxxxxx,//主账号ID
        "userName": "root",
        "secretId": "",
        "sessionContext": {
            "userIp": "127.0.0.1"
        }
    },
    "eventTime": "2018-01-02 21:50:51",
    "eventVersion": "1.0",
    "eventSource": "cloud.tencent.com/login",
    "requestParameters": {
        "s_url": "cloud.tencent.com"
    },
    "sourceIPAddress": "127.0.0.1",
    "eventRegion": "gz",
    "eventName": "ConsoleLogin",
    "resourceType": "account",
    "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    "errorCode": 0,
    "errorMessage": "",
    "additionalEventData": {
        "LoginType": "qq",//账号登录类型
        "LoginTo": "https://console.cloud.tencent.com/cloudaudit",//登录成功后跳转到的页面
        "MFAUsed": "No"//此次登录是否开启了MFA验证
    },
    "requestID": "38a3b876d45c9a4d569359ec2e87d633",
    "eventID": "7fbfd66c5d5af7e6ea7f209f6bf769b71",
    "eventType": "ConsoleLogin",
    "apiVersion": "1.0",
    "resources": "*",
    "resourceName": "*"
}

原来登录一下便产生了怎么丰富的日志啊,那这个日志的每个字段的含义是什么啊?

字段

描述

userIdentity

账户基本信息

eventTime

事件发生的时间

eventVersion

日志版本目前是1.0

eventSource

事件源

requestParameters

事件发生时的请求参数

sourceIPAddress

发起操作的IP

eventRegion

发起操作的资源的地域

eventName

事件名称

resourceType

资源类型

userAgent

客户端

errorCode

错误码

errorMessage

错误信息

additionalEventData

额外参数

requestID

请求ID

eventID

事件ID

eventType

事件类型

apiVersion

API版本

resources

资源

resources

资源名称

然后,怎么丰富的日志里,哪个字段可以标识登录呢?

在上面的日志字段里面,有一个字段叫做事件名称,其中这个字段便可以标识登录事件。当eventName是ConsoleLogin的时候,即标识了这个字段。(PS:我不想监控登录了,我想监控机器重启,怎么确定这个字段的值呢?这个暂时可以参考https://cloud.tencent.com/document/api其中API概览里面的ActionName即是这个字段的值。)

最关键的问题,怎么检索这个日志?

审计日志中最关键的便是检索日志了,所以腾讯云提供了两种方案供用户来做选择。

云审计控制台 然后,再进行关键字搜索,假如要搜索登录事件的话,便在输入框中输入ConsoleLogin即可。(PS:日志会有5到15分钟的延迟)最后,便可以看到搜索结果了。这种方式,适合人工来查看审计日志详情。但是不能够自动化的做账户监控。如果用户想要做自动化的监控的话,可以试试下面的方式。

  • 调用云API进行检索。(目前仅支持PHP版本的SDK)

以使用PHP SDK为例,如何监控登录事件。

首先,下载PHP的SDK(http://devcloudaudit-1254962721.cosgz.myqcloud.com/qcloudapi-sdk-php-master.tar)。

然后,将这个SDK代码解压,编辑demo.php。

<?php
error_reporting(E_ALL ^ E_NOTICE);
require_once './src/QcloudApi/QcloudApi.php';


$config = array('SecretId'=> 'AKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX','SecretKey'=> 'hDXXXXXXXXXXXXXXXXXXXXXXXXXXXXX','RequestMethod'  => 'GET','DefaultRegion'  => 'gz');
$ca = QcloudApi::load(QcloudApi::MODULE_CLOUDAUDIT, $config);
$nowTime = time();
$startTime = $nowTime-120;
$alarmAction = 'ConsoleLogin'; //您认为是敏感的action
$package = array('EndTime'=>$nowTime,'LookupAttributes'=>'[{"AttributeKey":"string","AttributeValue":"'.$alarmAction.'"}]','MaxResults'=>10,'StartTime'=>$startTime);
$a = $ca->LookUpEvents($package);
if ($a === false) {
    $error = $ca->getError();
    echo "Error code:" . $error->getCode() . ".\n";
    echo "message:" . $error->getMessage() . ".\n";
    echo "ext:" . var_export($error->getExt(), true) . ".\n";
} else {
    var_dump($a);
}

$response = $ca->getLastResponse();
$response = json_decode($response,true);
$events = $response['data']['Events'];
$alarmFlag = false;
foreach ($events as $event){
    if($event['EventName'] == $alarmAction){
        $alarmFlag = true;
    }
}
$alarmContent = '';
if($response['code'] != 0){
	$alarmContent = 'API failed';
}else if ($alarmFlag === true){
	$alarmContent = $alarmAction .'IsOccur!';
}
if($alarmContent != ''){
  $cmd = 'cagent_tools alarm '.$alarmContent;
  shell_exec($cmd);
}

其中代码里面的SecretId和SecretKey两个变量是用户调用腾讯云API的凭证。可以在这里获取(https://console.cloud.tencent.com/cam/capi)。细心的读者会发现在代码的倒数第二行有一句话,shell_exc($cmd);执行shell命令的,而shell命令的值是cagent_tools alarm $alarmContent。这个不是标准的shell命令啊。是不是还要装什么依赖?这样便引出了最后一个疑问。

最后,要是真的检索到了异常操作怎么及时通知到我啊?

腾讯云同样提供了免费短信通知的功能(但是条数有限:1000条),同时提供了命令行发送工具cagent_tools,没错就是上面的shell命令中的cagent_tools。具体使用方式可以参考:https://cloud.tencent.com/document/product/248/6218

感谢您看到了文章的最后,如果您觉得这篇文章的描述条理不够清晰的话。您可以试试腾讯云实验室提供的关于云审计的教程(https://cloud.tencent.com/developer/labs/lab/10328)。

下期预告

使用EMR分析云审计,建立海陆空全面审计

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『中级篇』如何在window上通过vagrant安装虚拟机(八)

20160
来自专栏FreeBuf

安全科普:利用WireShark破解网站密码

当我们输入账号、密码登录一个网站时,如果网站允许你使用HTTP(明文)进行身份验证,那么此时捕获通信流量非常简单,我们完全可以对捕获到的流量进行分析以获取登录账...

31950
来自专栏玩转全栈

Flutter封装阿里push

因为阿里的推送对小米和华为的离线推送兼容的比较好,因此,我使用flutter将阿里推送封装了一下,效过图,如下所示,这里是将进程杀死之后,小米设备收到的推送效果...

2.9K70
来自专栏图像识别与深度学习

Android Studio下打jar包及使用jar包

66950
来自专栏恰童鞋骚年

.NET Core微服务之基于Consul实现服务治理

  Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,比如 Airbnb的SmartSt...

1.1K40
来自专栏FreeBuf

方程式组织DanderSpritz工具测试环境研究

DanderSpritz是NSA泄露的一款著名的界面化远控工具,由于其功能强大因此也成为了许多安全人员争相研究的对象。但在实际测试过程中,由于缺少说明文档,所以...

14040
来自专栏WindCoder

PPPOE(拨号上网)常见故障代码及分析

1)645故障描述:拨号适配器未装 这种情况主要针对Windows ME和Windows98而言,解决办法是在Windows98下添加拨号适配器组件即可。对W...

64110
来自专栏软件开发 -- 分享 互助 成长

CY7C68013A的一点总结

一、 值得参考的资料:FX2 TechRefManual、USB应用开发宝典、 LabVIEW-USB通信简单教程(用于参考生成labview驱动程序)、USB...

24380
来自专栏流柯技术学院

Android APP测试的日志文件抓取

  实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志

64510
来自专栏小白安全

web渗透思路及总结

(一)针对网站程序,不考虑服务器。 一、查找注入,注意数据库用户权限和站库是否同服。 二、查找XSS,最近盲打很流行,不管怎样我们的目的是进入后台。...

86570

扫码关注云+社区

领取腾讯云代金券