Cloud-App-Security.psm1


#----------------------------Enum Types----------------------------
enum mcas_app {
    Amazon_Web_Services = 11599
    Box = 10489
    Dropbox = 11627
    Google_Apps = 11770
    Microsoft_OneDrive_for_Business = 15600
    Microsoft_Cloud_App_Security = 20595
    Microsoft_Sharepoint_Online = 20892
    Microsoft_Skype_for_Business = 25275
    Microsoft_Exchange_Online = 20893
    Microsoft_Teams = 28375
    Microsoft_Yammer = 11522
    Microsoft_Power_BI = 26324
    Office_365 = 11161
    Okta = 10980
    Salesforce = 11114
    ServiceNow = 14509
    }

enum device_type {
    BARRACUDA
    BLUECOAT
    CHECKPOINT
    CISCO_ASA
    CISCO_IRONPORT_PROXY
    CISCO_FWSM
    CISCO_SCAN_SAFE
    CLAVISTER
    FORTIGATE
    JUNIPER_SRX
    MACHINE_ZONE_MERAKI
    MCAFEE_SWG
    MICROSOFT_ISA_W3C
    PALO_ALTO
    PALO_ALTO_SYSLOG
    SONICWALL_SYSLOG
    SOPHOS_CYBEROAM
    SOPHOS_SG
    SQUID
    SQUID_NATIVE
    WEBSENSE_SIEM_CEF
    WEBSENSE_V7_5
    ZSCALER
    }

enum blockscript_format {
    BLUECOAT_PROXYSG = 102
    CISCO_ASA = 104
    FORTINET_FORTIGATE = 108
    PALO_ALTO = 112
    JUNIPER_SRX = 129
    WEBSENSE = 135
    ZSCALER = 120
    }

enum ip_category {
    None = 0
    Internal = 1
    Administrative = 2
    Risky = 3
    VPN = 4
    Cloud_Provider = 5
    }

enum severity_level {
    High = 2
    Medium = 1
    Low = 0
    }

enum resolution_status {
    Resolved = 2
    Dismissed = 1
    Open = 0
    }

enum file_type {
    Other = 0
    Document = 1
    Spreadsheet = 2
    Presentation = 3
    Text = 4
    Image = 5
    Folder = 6
    }

enum file_access_level {
    Private = 0
    Internal = 1
    External = 2
    Public = 3
    PublicInternet = 4
    }

enum subnet_category {
    Corporate = 1
    Administrative = 2
    Risky = 3
    VPN = 4
    CloudProvider = 5
    Other = 6
    }

enum app_category {
    ACCOUNTING_AND_FINANCE
    ADVERTISING
    BUSINESS_MANAGEMENT
    CLOUD_STORAGE
    CODE_HOSTING
    COLLABORATION
    COMMUNICATIONS
    CONTENT_MANAGEMENT
    CONTENT_SHARING
    CRM
    CUSTOMER_SUPPORT
    DATA_ANALYTICS
    DEVELOPMENT_TOOLS
    ECOMMERCE
    EDUCATION
    FORUMS
    HEALTH
    HOSTING_SERVICES
    HUMAN_RESOURCE_MANAGEMENT
    IT_SERVICES
    MARKETING
    MEDIA
    NEWS_AND_ENTERTAINMENT
    ONLINE_MEETINGS
    OPERATIONS_MANAGEMENT
    PRODUCT_DESIGN
    PRODUCTIVITY
    PROJECT_MANAGEMENT
    PROPERTY_MANAGEMENT
    SALES
    SECURITY
    SOCIAL_NETWORK
    SUPLLY_CHAIN_AND_LOGISTICS
    TRANSPORTATION_AND_TRAVEL
    VENDOR_MANAGEMENT_SYSTEM
    WEB_ANALYTICS
    WEBMAIL
    WEBSITE_MONITORING
    }

enum permission_type {
    READ_ONLY
    FULL_ACCESS
    }


#----------------------------Hash Tables---------------------------
$IPTagsList = @{
    Anonymous_Proxy = '000000030000000000000000'
    Botnet = '0000000c0000000000000000'
    Darknet_Scanning_IP = '0000001f0000000000000000'
    Exchange_Online = '0000000e0000000000000000'
    Exchange_Online_Protection = '000000150000000000000000'
    Malware_CnC_Server = '0000000d0000000000000000'
    Microsoft_Cloud = '0000001e0000000000000000'
    Microsoft_Authentication_and_Identity = '000000100000000000000000'
    Office_365 = '000000170000000000000000'
    Office_365_Planner = '000000190000000000000000'
    Office_365_ProPlus = '000000120000000000000000'
    Office_Online = '000000140000000000000000'
    Office_Sway = '0000001d0000000000000000'
    Office_Web_Access_Companion = '0000001a0000000000000000'
    OneNote = '000000130000000000000000'
    Remote_Connectivity_Analyzer = '0000001c0000000000000000'
    Satellite_Provider = '000000040000000000000000'
    SharePoint_Online = '0000000f0000000000000000'
    Skype_for_Business_Online = '000000180000000000000000'
    Smart_Proxy_and_Access_Proxy_Network = '000000050000000000000000'
    Tor = '2dfa95cd7922d979d66fcff5'
    Yammer = '0000001b0000000000000000'
    Zscaler = '000000160000000000000000'
    }

$ReportsList = @{
    'Activity by Location' = 'geolocation_summary'
    'Browser Use' = 'browser_usage'
    'IP Addresses' = 'ip_usage'
    'IP Addresses for Admins' = 'ip_admin_usage'
    'OS Use' = 'os_usage'
    'Strictly Remote Users' = 'standalone_users'
    'Cloud App Overview' = 'app_summary'
    'Inactive Accounts' = 'zombie_users'
    'Privileged Users' = 'admins'
    'Salesforce Special Privileged Accounts' = 'sf_permissions'
    'User Logon' = 'logins_rate'
    'Data Sharing Overview' = 'files_summary'
    'File Extensions' = 'file_extensions'
    'Orphan Files' = 'orphan_files'
    'Outbound Sharing by Domain' = 'external_domains'
    'Owners of Shared Files' = 'shared_files_owners'
    'Personal User Accounts' = 'personal_users'
    'Sensitive File Names' = 'file_name_dlp'
}

# Reversed copy of the reports list hash table (keys become values and value become keys)
$ReportsListReverse = @{}
$ReportsList.GetEnumerator() | ForEach-Object {$ReportsListReverse.Add($_.Value,$_.Key)}

$GovernanceStatus = @{
    'Failed' = $false
    'Pending' = $null
    'Successful' = $true
}

<#
enum alert_type
    {
    ALERT_ADMIN_USER = 14680070
    ALERT_CABINET_EVENT_MATCH_AUDIT = 15728641
    ALERT_CABINET_EVENT_MATCH_FILE = 15728642
    ALERT_GEOLOCATION_NEW_COUNTRY = 196608
    ALERT_MANAGEMENT_DISCONNECTED_API = 15794945
    ALERT_SUSPICIOUS_ACTIVITY = 14680083
    ALERT_COMPROMISED_ACCOUNT =
    ALERT_DISCOVERY_ANOMALY_DETECTION =
    ALERT_CABINET_INLINE_EVENT_MATCH =
    ALERT_CABINET_EVENT_MATCH_OBJECT =
    ALERT_CABINET_DISCOVERY_NEW_SERVICE =
    ALERT_NEW_ADMIN_LOCATION =
    ALERT_PERSONAL_USER_SAGE =
    ALERT_ZOMBIE_USER =
    }
#>



#----------------------------Include functions---------------------------
# KUDOS to the chocolatey project for the basis of this code

# get the path of where the module is saved (if module is at c:\myscripts\module.psm1, then c:\myscripts\)
$mypath = (Split-Path -Parent -Path $MyInvocation.MyCommand.Definition)

#find all the ps1 files in the Functions subfolder
Resolve-Path -Path $mypath\Functions\*.ps1 | ForEach-Object -Process {
    . $_.ProviderPath
}


#----------------------------Exports---------------------------
# Cmdlets to export (must be exported as functions, not cmdlets) - This array format can be copied directly to the manifest as the 'FunctionsToExport' value
$ExportedCommands = @('Add-MCASAdminAccess','Export-MCASBlockScript','Get-MCASAdminAccess','Get-MCASAccount','Get-MCASActivity','Get-MCASActivityTypes','Get-MCASAlert','Get-MCASAppInfo','Get-MCASCredential','Get-MCASDiscoveredApp','Get-MCASFile','Get-MCASGovernanceAction','Get-MCASPolicy','Get-MCASReport','Get-MCASReportData','Get-MCASStream','Get-MCASSubnet','New-MCASSubnet','Remove-MCASAdminAccess','Send-MCASDiscoveryLog','Set-MCASAlert')
$ExportedCommands | ForEach-Object {Export-ModuleMember -Function $_}

#Export-ModuleMember -Function Invoke-MCASRestMethod2

# Vars to export (must be exported here, even if also included in the module manifest in 'VariablesToExport'
Export-ModuleMember -Variable CASCredential

# Aliases to export
Export-ModuleMember -Alias *