[{"data":1,"prerenderedAt":2388},["ShallowReactive",2],{"application-flags":3,"navbar":7,"always-visible-banner":36,"navbar-about-highlight":108,"navbar-resource-highlight":182,"blog/manage-saas-risks-without-hindering-employees":226},[4],{"name":5,"enabled":6},"maintenanceMode",false,[8],{"createdDate":9,"id":10,"name":11,"modelId":12,"published":13,"query":14,"data":15,"variations":20,"lastUpdated":21,"firstPublished":22,"testRatio":23,"createdBy":24,"lastUpdatedBy":25,"folders":26,"meta":27,"rev":35},1742208588866,"1c7a4e423bf54ac1a328bb4063459ef2","Banner","1c6207a5f24948ab82d4a0b17f251193","published",[],{"type":16,"url":17,"text":18,"link":19},"web-banner","https://pushsecurity.com/resources/browser-attacks-report","Get our latest report analyzing browser attack techniques in 2026",{},{},1774258294825,1742208637545,1,"CydmZnOWU1XuAaLhEDCoYNM4Z8W2","jKjF9r5jcvXU8tzZEfFQm31Iyvr2",[],{"kind":28,"lastPreviewUrl":29,"breakpoints":30,"hasAutosaves":34},"data","",{"xsmall":31,"small":32,"medium":33},320,640,768,true,"ga0kpxjhh76",{"createdDate":37,"id":38,"name":39,"modelId":40,"published":13,"stageModifiedSincePublish":6,"query":41,"data":42,"variations":97,"lastUpdated":98,"firstPublished":99,"testRatio":23,"createdBy":100,"lastUpdatedBy":101,"folders":102,"meta":103,"rev":107},1774965361051,"fd266d0172cc47429be7ad10f48c99ad","always visible banner","0678d178ec8b41efb8a23c09dba7874d",[],{"ctaText":43,"text":44,"url":29,"blocks":45,"state":93},"ewrererw","testrfesssssssssss",[46,73,81],{"@type":47,"@version":48,"id":49,"component":50,"responsiveStyles":63},"@builder.io/sdk:Element",2,"builder-ca12c06a52de41d7b8743da53118cd38",{"name":51,"tag":51,"options":52,"isRSC":62},"TopBannerContent",{"text":53,"ctaText":54,"url":55,"mainText":56,"cta":59},"New Webinar Series: Join John Hammond, Troy Hunt, and Matt Johansen for the State of Browser Attacks","Save Your Spot","https://pushsecurity.com/webinar/state-of-browser-security",{"content":57,"fontSize":58},"\u003Cp>Meet Push's browser security experts at BlackHat 2026.\u003C/p>","text-base",{"content":60,"fontSize":58,"url":61},"\u003Cp>Book a meeting →\u003C/p>","https://pushsecurity.com/events/blackhat-2026-meeting",null,{"large":64},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69,"marginTop":70,"marginBottom":70,"fontSize":71,"fontWeight":72},"flex","column","relative","0","border-box",".56rem","1.125rem","700",{"@type":47,"@version":48,"id":74,"component":75,"responsiveStyles":79},"builder-a2e1f4b9f30b464bb814d7f5de5b0aa7",{"name":76,"options":77,"isRSC":62},"Custom Code",{"code":78,"scriptsClientOnly":6},"\u003Cstyle>\n  .top-banner.bg-web-orange{background:rgb(114, 79, 255);}\n\u003C/style>\n",{"large":80},{"display":65,"flexDirection":66,"position":67,"flexShrink":68,"boxSizing":69},{"id":82,"@type":47,"tagName":83,"properties":84,"responsiveStyles":88},"builder-pixel-o503s4fpvk","img",{"src":85,"aria-hidden":86,"alt":29,"role":87,"width":68,"height":68},"https://cdn.builder.io/api/v1/pixel?apiKey=f3a1111ff5be48cdbb123cd9f5795a05","true","presentation",{"large":89},{"height":68,"width":68,"display":90,"opacity":68,"overflow":91,"pointerEvents":92},"block","hidden","none",{"deviceSize":94,"location":95},"large",{"path":29,"query":96},{},{},1783541846936,1774968080803,"ST0tXQM8slWpFrmioqKHmENB2qe2","kYgMv6WsbvfmlOUYqR2SFwGzw6e2",[],{"kind":104,"lastPreviewUrl":105,"hasLinks":6,"breakpoints":106,"hasErrors":6,"hasAutosaves":6},"component","https://pushsecurity.com/?builder.space=f3a1111ff5be48cdbb123cd9f5795a05&builder.user.permissions=read%2Ccreate%2Cpublish%2CeditDesigns%2CeditLayouts%2CeditLayers%2CeditContentPriority%2CeditFolders%2CcreateProjects%2CsendPullRequests&builder.user.role.name=Designer&builder.user.role.id=creator&builder.cachebust=true&builder.preview=always-visible-banner&builder.noCache=true&builder.allowTextEdit=true&__builder_editing__=true&builder.overrides.always-visible-banner=fd266d0172cc47429be7ad10f48c99ad&builder.overrides.fd266d0172cc47429be7ad10f48c99ad=fd266d0172cc47429be7ad10f48c99ad&builder.options.locale=Default",{"xsmall":31,"small":32,"medium":33},"kyujw1aptq",[109,145],{"createdDate":110,"id":111,"name":112,"modelId":113,"published":13,"stageModifiedSincePublish":6,"query":114,"data":115,"variations":138,"lastUpdated":139,"firstPublished":140,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":141,"meta":142,"rev":144},1776247359804,"9136a8f18b3b4a6ba29b8653a99372b1","testimonial-inductive-automation","20d9eaa352304613b3d1a794b400703d",[],{"link":116,"type":117,"testimonialLink":118,"testimonial":119},{},"testimonial","/customer-stories/inductive-automation",{"@type":120,"id":121,"model":117,"value":122},"@builder.io/core:Reference","f028f2b685bb47cd8bf9e82a26dd5a79",{"query":123,"folders":124,"createdDate":125,"id":121,"name":126,"modelId":127,"published":13,"data":128,"variations":132,"lastUpdated":133,"firstPublished":134,"testRatio":23,"createdBy":100,"lastUpdatedBy":100,"meta":135,"rev":137},[],[],1735823466309,"We found Push to be more accurate when compared to competitors and the browser agent offered features that others couldn’t match.","42035571a56940ac98bff4544aa79aa5",{"author":129,"jobTitle":130,"quote":126,"image":131},"Jason Waits","\u003Cp>CISO at Inductive Automation\u003C/p>","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2Ff04c0c0689ce4a89ac0f0708d78c0a07",{},1735910703862,1735823501152,{"kind":28,"lastPreviewUrl":29,"breakpoints":136,"hasAutosaves":34},{"small":32,"medium":33},"e8bsg4qrgtu",{},1776247404986,1776247404973,[],{"breakpoints":143,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},"g9lqcuxphw7",{"createdDate":146,"id":147,"name":148,"modelId":113,"published":13,"meta":149,"stageModifiedSincePublish":6,"query":151,"data":152,"variations":178,"lastUpdated":179,"firstPublished":180,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":181,"rev":144},1776255761419,"05a9322735fc427db12e2740e4302300","Report: 2026 Browser Attack Techniques",{"breakpoints":150,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},[],{"testimonial":153,"link":172,"type":175,"title":148,"description":176,"image":177},{"@type":120,"id":154,"model":117,"value":155},"192acbb1f9ca4cac918c0ec435a8bae3",{"query":156,"folders":157,"createdDate":158,"id":154,"name":159,"modelId":127,"published":13,"data":160,"variations":166,"lastUpdated":167,"firstPublished":168,"testRatio":23,"createdBy":100,"lastUpdatedBy":24,"meta":169,"rev":171},[],[],1728981467463,"Push does for identity what CrowdStrike did for the endpoint",{"video":161,"jobTitle":162,"author":163,"qoute":29,"quote":164,"image":165},"https://cdn.builder.io/o/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F8b30e8ca50064058bbaef0f3c6164575%2Fcompressed?apiKey=f3a1111ff5be48cdbb123cd9f5795a05&token=8b30e8ca50064058bbaef0f3c6164575&alt=media&optimized=true","\u003Cp>Deputy CISO at Microsoft\u003C/p>\u003Cp>Former LinkedIn, Slack, Palantir\u003C/p>","Geoff Belknap","Push does for identity what CrowdStrike did for the endpoint.","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F748f0ad0a5064a00a13f4721fcc8dea1",{},1742902158597,1728981782923,{"kind":28,"lastPreviewUrl":29,"breakpoints":170,"hasAutosaves":34},{"small":32,"medium":33},"ulhc0im1hfo",{"text":173,"url":174},"Download now","/resources/browser-attacks-report","resource","Learn about the latest techniques being used in the wild.","https://cdn.builder.io/api/v1/image/assets%2Ff3a1111ff5be48cdbb123cd9f5795a05%2F7b4a5ebf81d64e8c9d7fc35f6c96c4a9",{},1776255810913,1776255810900,[],[183,205],{"createdDate":184,"id":185,"name":148,"modelId":186,"published":13,"meta":187,"stageModifiedSincePublish":6,"query":189,"data":190,"variations":200,"lastUpdated":201,"firstPublished":202,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":203,"rev":204},1776256900280,"1f429607996e4e5fae8fe3f9b9610e55","4829faa81e7c4ee8bd2d000e160e8d3c",{"breakpoints":188,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},[],{"testimonial":191,"link":199,"type":175,"title":148,"description":176,"image":177},{"@type":120,"id":154,"model":117,"value":192},{"query":193,"folders":194,"createdDate":158,"id":154,"name":159,"modelId":127,"published":13,"data":195,"variations":196,"lastUpdated":167,"firstPublished":168,"testRatio":23,"createdBy":100,"lastUpdatedBy":24,"meta":197,"rev":171},[],[],{"video":161,"jobTitle":162,"author":163,"qoute":29,"quote":164,"image":165},{},{"kind":28,"lastPreviewUrl":29,"breakpoints":198,"hasAutosaves":34},{"small":32,"medium":33},{"text":173,"url":174},{},1776256937553,1776256937540,[],"xggsv10v1q9",{"createdDate":206,"id":207,"name":208,"modelId":186,"published":13,"stageModifiedSincePublish":6,"query":209,"data":210,"variations":220,"lastUpdated":221,"firstPublished":222,"testRatio":23,"createdBy":24,"lastUpdatedBy":24,"folders":223,"meta":224,"rev":204},1776256949234,"ce043785b71b4ece98eac811ecf4ba10","inductive-automation",[],{"link":211,"type":117,"testimonial":212,"testimonialLink":118},{},{"@type":120,"id":121,"model":117,"value":213},{"query":214,"folders":215,"createdDate":125,"id":121,"name":126,"modelId":127,"published":13,"data":216,"variations":217,"lastUpdated":133,"firstPublished":134,"testRatio":23,"createdBy":100,"lastUpdatedBy":100,"meta":218,"rev":137},[],[],{"author":129,"jobTitle":130,"quote":126,"image":131},{},{"kind":28,"lastPreviewUrl":29,"breakpoints":219,"hasAutosaves":34},{"small":32,"medium":33},{},1776256974140,1776256974130,[],{"breakpoints":225,"kind":28,"lastPreviewUrl":29,"hasAutosaves":6},{"xsmall":31,"small":32,"medium":33},{"id":227,"title":228,"authorsCollection":229,"content":237,"extension":882,"faqItemsCollection":883,"faqTitle":62,"featured":6,"hashTags":62,"meta":885,"metaTitle":886,"ogImage":62,"publishedDate":887,"relatedBlogPostsCollection":888,"slug":2362,"stem":2363,"subtitle":62,"summary":2364,"synopsis":2375,"sys":2376,"tagsCollection":2379,"__hash__":2387},"blog/blog/manage-saas-risks-without-hindering-employees.json","5 steps to manage the risk of unsanctioned SaaS ",{"items":230},[231],{"fullName":232,"firstName":233,"jobTitle":234,"profilePicture":235},"Jacques Louw","Jacques","Co-founder / CRO",{"url":236},"https://images.ctfassets.net/y1cdw1ablpvd/39m8bektV23lnCRcEq0G8h/2a08f6276a50744f1a4b499b273f6bb2/Push_Founders_at_Cahoots_October_28_2022_by_Doug_Coombe-21.jpg",{"json":238,"links":870},{"nodeType":239,"data":240,"content":241},"document",{},[242,257,264,271,278,286,317,324,343,350,370,377,386,527,534,541,548,601,608,627,634,641,648,655,662,669,676,683,690,698,705,712,737,744,751,758,765,772,779,786,793,800,807,814,821,828,835,842,846,853,856,863],{"nodeType":243,"data":244,"content":245},"paragraph",{},[246,251],{"nodeType":247,"value":248,"marks":249,"data":250},"text","SaaS is exploding and making employees more productive than ever. If your security strategy relies on simply blocking all SaaS that hasn’t been sanctioned by your security team, you’re also blocking your coworkers from all the productivity gains that SaaS brings to the table. Not only that, but blocking through official channels doesn’t effectively stop employees from accessing the SaaS apps they want to use – you just can’t see it because they may have turned off the endpoint agent you’re using to manage SaaS policies, bypass the proxy, or change proxy settings. And now you’ve got a “Shadow IT problem!” *",[],{},{"nodeType":247,"value":252,"marks":253,"data":256},"Dread ensues*",[254],{"type":255},"italic",{},{"nodeType":243,"data":258,"content":259},{},[260],{"nodeType":247,"value":261,"marks":262,"data":263},"Some folks even choose to block or turn off app stores to limit SaaS adoption by employees. The issue with this is that you’re blocking them from using productivity tools they want to do their work. You think you’re preventing risk (though we know employees find ways to adopt and use SaaS regardless of your controls), but you’re also restricting employees from being productive, flexible, and, frankly, you’re ticking them off. These kinds of actions widen the divide between security and the rest of the company, which is never a good thing. ",[],{},{"nodeType":243,"data":265,"content":266},{},[267],{"nodeType":247,"value":268,"marks":269,"data":270},"Stay cool, stay calm, we’ve got this. To manage SaaS, you need some sense of control over what employees are using and how they’re using it, right? By working with employees and doing the legwork to understand their needs, you can start to repair relationships there, which makes your job much easier in the long run.",[],{},{"nodeType":243,"data":272,"content":273},{},[274],{"nodeType":247,"value":275,"marks":276,"data":277},"However, before we go down the path of understanding how employees are using SaaS, you first need to know which apps they’re using.",[],{},{"nodeType":279,"data":280,"content":281},"heading-1",{},[282],{"nodeType":247,"value":283,"marks":284,"data":285},"How do I find the SaaS apps employees are actually using?",[],{},{"nodeType":243,"data":287,"content":288},{},[289,293,299,303,313],{"nodeType":247,"value":290,"marks":291,"data":292},"You can discover the apps employees are using in a couple ways: 1) manually, using the data you already have access to or, 2) using a pre-existing tool (oh hey, we have one you can ",[],{},{"nodeType":247,"value":294,"marks":295,"data":298},"use for free",[296],{"type":297},"underline",{},{"nodeType":247,"value":300,"marks":301,"data":302},"). We wrote a ",[],{},{"nodeType":304,"data":305,"content":307},"hyperlink",{"uri":306},"https://pushsecurity.com/blog/rolling-your-own-saas-discovery/",[308],{"nodeType":247,"value":309,"marks":310,"data":312},"guide",[311],{"type":297},{},{"nodeType":247,"value":314,"marks":315,"data":316}," about how you might do the manual approach for SaaS discovery, though fair warning… this manual effort isn’t for the faint of heart.",[],{},{"nodeType":243,"data":318,"content":319},{},[320],{"nodeType":247,"value":321,"marks":322,"data":323},"For the purposes of this guide, we’re going to assume you’ve taken care of the SaaS discovery process already and you’re now facing a list of SaaS - potentially a very large one - you didn’t know employees were using. ",[],{},{"nodeType":243,"data":325,"content":326},{},[327,331,339],{"nodeType":247,"value":328,"marks":329,"data":330},"If you haven’t discovered the unknown SaaS in your organization, we suggest you ",[],{},{"nodeType":304,"data":332,"content":334},{"uri":333},"https://login.pushsecurity.com/u/signup",[335],{"nodeType":247,"value":336,"marks":337,"data":338},"sign up",[],{},{"nodeType":247,"value":340,"marks":341,"data":342},", let us do the heavy lifting for you to discover SaaS, then use that list as a starting point for this next phase of the process…",[],{},{"nodeType":279,"data":344,"content":345},{},[346],{"nodeType":247,"value":347,"marks":348,"data":349},"I’ve found some SaaS apps I didn’t know about. Now what?",[],{},{"nodeType":243,"data":351,"content":352},{},[353,357,366],{"nodeType":247,"value":354,"marks":355,"data":356},"You’ve found the apps (hooray!), so now you’re on the hook to figure out what risks those apps might pose to the company (wasn’t ignorance bliss?). Does it help to know that most organizations find a large list of unknown apps so you’re not alone? A ",[],{},{"nodeType":304,"data":358,"content":360},{"uri":359},"https://track.g2.com/resources/shadow-it-statistics",[361],{"nodeType":247,"value":362,"marks":363,"data":365},"report",[364],{"type":297},{},{"nodeType":247,"value":367,"marks":368,"data":369}," from G2 Crowd stated that the average company has 975 unknown cloud services and that 67% of teams have introduced their own collaboration tools into an organization.",[],{},{"nodeType":243,"data":371,"content":372},{},[373],{"nodeType":247,"value":374,"marks":375,"data":376},"Even though you’re not alone, you still need to protect employee and company data from unnecessary third-party risk. Here’s a quick rundown of what you need to do next to get a handle on SaaS without restricting its use.",[],{},{"nodeType":378,"data":379,"content":385},"embedded-entry-block",{"target":380},{"sys":381},{"id":382,"type":383,"linkType":384},"TgFACpcpdooMuPLPXvlk4","Link","Entry",[],{"nodeType":387,"data":388,"content":389},"ordered-list",{},[390,450,465,480,495],{"nodeType":391,"data":392,"content":393},"list-item",{},[394,407],{"nodeType":243,"data":395,"content":396},{},[397,403],{"nodeType":247,"value":398,"marks":399,"data":402},"Ensure basic account security controls are in place across all SaaS. ",[400],{"type":401},"bold",{},{"nodeType":247,"value":404,"marks":405,"data":406},"To get at this information, you’ll need either a tool (we got you!) or you’ll need to go directly to employees to get necessary information about how they’re accessing and using SaaS. You’ll need to know:",[],{},{"nodeType":387,"data":408,"content":409},{},[410,420,430,440],{"nodeType":391,"data":411,"content":412},{},[413],{"nodeType":243,"data":414,"content":415},{},[416],{"nodeType":247,"value":417,"marks":418,"data":419},"Are employees using multi-factor authentication (MFA) or two-factor authentication (2FA) where available? ",[],{},{"nodeType":391,"data":421,"content":422},{},[423],{"nodeType":243,"data":424,"content":425},{},[426],{"nodeType":247,"value":427,"marks":428,"data":429},"What about strong passwords and password policies? ",[],{},{"nodeType":391,"data":431,"content":432},{},[433],{"nodeType":243,"data":434,"content":435},{},[436],{"nodeType":247,"value":437,"marks":438,"data":439},"Are they sharing passwords across multiple apps? ",[],{},{"nodeType":391,"data":441,"content":442},{},[443],{"nodeType":243,"data":444,"content":445},{},[446],{"nodeType":247,"value":447,"marks":448,"data":449},"Are they sharing login credentials as a team - some teams will do this to stay on a free or trial tier by only having a “single” user. ",[],{},{"nodeType":391,"data":451,"content":452},{},[453],{"nodeType":243,"data":454,"content":455},{},[456,461],{"nodeType":247,"value":457,"marks":458,"data":460},"Try to identify SaaS that is no longer needed/used and remove it. ",[459],{"type":401},{},{"nodeType":247,"value":462,"marks":463,"data":464},"You won't believe how quickly you build up SaaS baggage as users move to the newest hottest thing.",[],{},{"nodeType":391,"data":466,"content":467},{},[468],{"nodeType":243,"data":469,"content":470},{},[471,476],{"nodeType":247,"value":472,"marks":473,"data":475},"Identify apps that are used to create and store data you care about. ",[474],{"type":401},{},{"nodeType":247,"value":477,"marks":478,"data":479},"Then prioritize them for some additional scrutiny.",[],{},{"nodeType":391,"data":481,"content":482},{},[483],{"nodeType":243,"data":484,"content":485},{},[486,491],{"nodeType":247,"value":487,"marks":488,"data":490},"Identify apps that integrate with those core apps. ",[489],{"type":401},{},{"nodeType":247,"value":492,"marks":493,"data":494},"They’re also processing that same data you care about. These are usually called OAuth applications or third-party integrations like apps and bots that add functionality and features to the core app.",[],{},{"nodeType":391,"data":496,"content":497},{},[498,514],{"nodeType":243,"data":499,"content":500},{},[501,505,510],{"nodeType":247,"value":502,"marks":503,"data":504},"Where your additional scrutiny identifies risks you can't live with, ",[],{},{"nodeType":247,"value":506,"marks":507,"data":509},"stop new users adopting those apps (by giving them a better alternative)",[508],{"type":401},{},{"nodeType":247,"value":511,"marks":512,"data":513}," and migrate existing users over to that alternative, approved app. ",[],{},{"nodeType":387,"data":515,"content":516},{},[517],{"nodeType":391,"data":518,"content":519},{},[520],{"nodeType":243,"data":521,"content":522},{},[523],{"nodeType":247,"value":524,"marks":525,"data":526},"To do this, you’ll need to look for secure alternatives to the SaaS employees are using that you have deemed too risky. This is important, albeit time-consuming. Offering an alternative sweetens the process for using more secure platforms before you outright block the bad ones. It also lets your colleagues know you’re considering their needs and not just restricting their work.",[],{},{"nodeType":243,"data":528,"content":529},{},[530],{"nodeType":247,"value":531,"marks":532,"data":533},"Beyond just the security of the technology itself, you need to ensure employees are doing their part in using the app securely. ",[],{},{"nodeType":279,"data":535,"content":536},{},[537],{"nodeType":247,"value":538,"marks":539,"data":540},"How to prioritize which apps require additional scrutiny",[],{},{"nodeType":243,"data":542,"content":543},{},[544],{"nodeType":247,"value":545,"marks":546,"data":547},"There’s no right or wrong approach for how to prioritize the apps you find during the discovery process, but we’ve found that most our customers prioritize apps based on if the app is:",[],{},{"nodeType":549,"data":550,"content":551},"unordered-list",{},[552,562,572,591],{"nodeType":391,"data":553,"content":554},{},[555],{"nodeType":243,"data":556,"content":557},{},[558],{"nodeType":247,"value":559,"marks":560,"data":561},"used by many people in the company, and",[],{},{"nodeType":391,"data":563,"content":564},{},[565],{"nodeType":243,"data":566,"content":567},{},[568],{"nodeType":247,"value":569,"marks":570,"data":571},"requesting access to highly sensitive data to work or integrating with SaaS that have data you don’t want exposed. This might be a cloud drive containing all sorts of documents, a CRM that uses customer data inputs, a billing platform, an app that’s used for signing legal documents, an HR platform, etc.",[],{},{"nodeType":391,"data":573,"content":574},{},[575],{"nodeType":243,"data":576,"content":577},{},[578,582,587],{"nodeType":247,"value":579,"marks":580,"data":581},"one you’ve never heard of before. Larger SaaS apps built for businesses (Salesforce, Microsoft, Google, etc.) are ",[],{},{"nodeType":247,"value":583,"marks":584,"data":586},"more likely",[585],{"type":255},{},{"nodeType":247,"value":588,"marks":589,"data":590}," to be secure than some of the smaller, newer SaaS apps who haven’t gone through the same levels of security reviews before going to market. ",[],{},{"nodeType":391,"data":592,"content":593},{},[594],{"nodeType":243,"data":595,"content":596},{},[597],{"nodeType":247,"value":598,"marks":599,"data":600},"used by high profile employees or employees with access to very sensitive corporate information (C-level executives, finance, legal, HR, etc.). ",[],{},{"nodeType":243,"data":602,"content":603},{},[604],{"nodeType":247,"value":605,"marks":606,"data":607},"For example, if you have a whole team using a single app that you’ve never heard of, add that app to the top of your priorities list for investigation. It’s likely business critical and serving a need for that team, so taking it away won’t be a good idea if you’re trying to build bridges between security and employees. Plus, more users probably means more data is stored within the app. Those users might also have integrated a lot of third-party apps or bots (OAuth) to that core application. ",[],{},{"nodeType":243,"data":609,"content":610},{},[611,615,623],{"nodeType":247,"value":612,"marks":613,"data":614},"Once you’ve determined which apps need investigation and prioritized them, head over to the National Cyber Security Centre’s ",[],{},{"nodeType":304,"data":616,"content":618},{"uri":617},"https://www.ncsc.gov.uk/collection/cloud/the-cloud-security-principles/lightweight-approach-to-cloud-security",[619],{"nodeType":247,"value":620,"marks":621,"data":622},"lightweight approach to cloud security",[],{},{"nodeType":247,"value":624,"marks":625,"data":626}," article. They offer some great guidance for how to reasonably access the risk of a SaaS app with limited time and resources. ",[],{},{"nodeType":243,"data":628,"content":629},{},[630],{"nodeType":247,"value":631,"marks":632,"data":633},"A big missing piece most companies have in their SaaS security strategy, though, is that they’re not working with employees to understand how they’re using SaaS. Before you roll your eyes, hear us out…",[],{},{"nodeType":279,"data":635,"content":636},{},[637],{"nodeType":247,"value":638,"marks":639,"data":640},"Secure SaaS by working with employees",[],{},{"nodeType":243,"data":642,"content":643},{},[644],{"nodeType":247,"value":645,"marks":646,"data":647},"Remember, employees are the owners of SaaS in your company - they’ve adopted and used SaaS tools in your environment, so they know better than anyone else how they’re using it, if they’re still using it, what the additional integrations in the app offer, and what it does for them. You, as their security lead, know how to determine if they’re logging in securely, if the data the app is requesting access to is an acceptable risk, if they’ve enabled built-in common sense security features like 2FA/MFA, and if the third-party integrations they’ve added are too high risk or requesting excessive permissions.",[],{},{"nodeType":243,"data":649,"content":650},{},[651],{"nodeType":247,"value":652,"marks":653,"data":654},"By working with employees, you can get the full picture of SaaS use within the company and understand what your colleagues need and coach them to improve the security of how they’re accessing and using the tools they prefer. The problem is that it’s really difficult to do manually in a real world environment because it’s just so time-consuming to reach out to each employee and ask a series of questions to get the context you need. ",[],{},{"nodeType":243,"data":656,"content":657},{},[658],{"nodeType":247,"value":659,"marks":660,"data":661},"If an entire team is using an app you weren’t aware of, you can talk to the technical owner or administrator of the app to understand how they’re using it. What doesn’t work at scale with manual outreach, however, is understanding how securely employees are logging in and accessing SaaS. ",[],{},{"nodeType":243,"data":663,"content":664},{},[665],{"nodeType":247,"value":666,"marks":667,"data":668},"You can automate this process with the right tool, using things like ChatOps and browser notifications, and just sit back and watch as employees improve their own security over time. This is particularly useful when it comes to some of the security hygiene basics, like using strong passwords and enabling MFA, which make a significant impact on overall security posture for very little effort.",[],{},{"nodeType":279,"data":670,"content":671},{},[672],{"nodeType":247,"value":673,"marks":674,"data":675},"What will I gain from working with employees?",[],{},{"nodeType":243,"data":677,"content":678},{},[679],{"nodeType":247,"value":680,"marks":681,"data":682},"Now that you know that working directly with employees to secure SaaS isn’t a pipe dream, nor does it have to be a manual effort or a one-off security campaign, what impact should you expect from these efforts? And how do you measure that impact?",[],{},{"nodeType":243,"data":684,"content":685},{},[686],{"nodeType":247,"value":687,"marks":688,"data":689},"Here are some of the most obvious wins…",[],{},{"nodeType":691,"data":692,"content":693},"heading-2",{},[694],{"nodeType":247,"value":695,"marks":696,"data":697},"Reduce your attack surface",[],{},{"nodeType":243,"data":699,"content":700},{},[701],{"nodeType":247,"value":702,"marks":703,"data":704},"Say you discover your marketing team is using Trello to manage projects, while the sales team is using Asana. Once you have this information, you can talk to the heads of each department to see if they’ll agree on a single solution. ",[],{},{"nodeType":243,"data":706,"content":707},{},[708],{"nodeType":247,"value":709,"marks":710,"data":711},"Without management, you’re likely to wind up using multiple (often dozens) of chat, project management, calendar-sharing apps and so on within your company. The issue with this is that it opens you up to unnecessary risk, with your data being held on the systems of hundreds of third parties outside of your traditional perimeter. By connecting users to each other and consolidating the SaaS apps in your company, you can dramatically reduce your attack surface. ",[],{},{"nodeType":243,"data":713,"content":714},{},[715,719,728,733],{"nodeType":247,"value":716,"marks":717,"data":718},"Similarly, removing dormant apps and accounts can have a huge impact. In a ",[],{},{"nodeType":304,"data":720,"content":722},{"uri":721},"https://productiv.com/blog/less-than-half-of-company-saas-applications-are-regularly-used-by-employees/",[723],{"nodeType":247,"value":724,"marks":725,"data":727},"recent report",[726],{"type":297},{},{"nodeType":247,"value":729,"marks":730,"data":732}," ",[731],{"type":297},{},{"nodeType":247,"value":734,"marks":735,"data":736},"by Productiv, they found that on average only 45% of the apps an organization or its employees have an account with are regularly engaged with. That means that potentially half of your SaaS attack surface is totally unnecessary.",[],{},{"nodeType":243,"data":738,"content":739},{},[740],{"nodeType":247,"value":741,"marks":742,"data":743},"Working with employees to find out what apps they are using (and which they are no longer) will allow you to eliminate attacker opportunities to access your data or steal employee account credentials.  ",[],{},{"nodeType":691,"data":745,"content":746},{},[747],{"nodeType":247,"value":748,"marks":749,"data":750},"Reduce supply chain risk",[],{},{"nodeType":243,"data":752,"content":753},{},[754],{"nodeType":247,"value":755,"marks":756,"data":757},"Every third-party SaaS app that your employees use is a supplier and therefore contributes to your overall supply chain risk exposure. Traditionally all technology and software providers will have been reviewed by security teams to ensure that they do not present excessive risk to your organization. However, the explosion in SaaS use has made this more challenging; 1) Most organizations have a large number of SaaS suppliers and its growing, 2) SaaS suppliers are now responsible for more aspects of security than on-prem software suppliers ever were (such as infrastructure security) so there is more to review and assure. ",[],{},{"nodeType":243,"data":759,"content":760},{},[761],{"nodeType":247,"value":762,"marks":763,"data":764},"Every time a duplicate or dormant SaaS app is removed, you’re removing a supplier whose security practices and posture need assuring. This saves your security team bags of time and reduces your overall cyber risk exposure. ",[],{},{"nodeType":243,"data":766,"content":767},{},[768],{"nodeType":247,"value":769,"marks":770,"data":771},"However, for the third-parties you need to continue to work with, you’ll want to perform due diligence to make sure you aren’t exposing yourself to the risk of a supply chain attack. ",[],{},{"nodeType":243,"data":773,"content":774},{},[775],{"nodeType":247,"value":776,"marks":777,"data":778},"Before you can trust a SaaS vendor with your data, you have to be assured the vendor is committed to maintaining an appropriate security standard and has the resources and capabilities to deliver against it. And you need to know how the vendor will secure your data when it is in transit, use and at rest. Understand how the vendor secures their network, monitors for malicious activity, what they’ll do in the event of an incident, and whether they have an adequate business continuity and disaster recovery plan. ",[],{},{"nodeType":243,"data":780,"content":781},{},[782],{"nodeType":247,"value":783,"marks":784,"data":785},"To speed up the due diligence process, you might rely on the vendor providing certification of a recognized standard, such as ISO27001, which demonstrates a solid security baseline.",[],{},{"nodeType":691,"data":787,"content":788},{},[789],{"nodeType":247,"value":790,"marks":791,"data":792},"Establish security as a business enabler",[],{},{"nodeType":243,"data":794,"content":795},{},[796],{"nodeType":247,"value":797,"marks":798,"data":799},"One thing to note, if you’re removing an app, it’s always a good idea to notify the employee(s) using it and suggest secure alternatives. Security teams are often seen as a blocker to be avoided and worked around. During that conversation, you can ask them what they were using the app for and then do some research to offer an alternative option that isn’t as risky to the company. ",[],{},{"nodeType":243,"data":801,"content":802},{},[803],{"nodeType":247,"value":804,"marks":805,"data":806},"Being able to recommend useful tools that can help your colleagues with their jobs (as opposed to just saying no or blocking unsanctioned apps) is  the difference between being seen as a business enabler rather than a business blocker. Once your security team is known for promoting innovative new technology as well as managing risk, employee engagement will increase. ",[],{},{"nodeType":691,"data":808,"content":809},{},[810],{"nodeType":247,"value":811,"marks":812,"data":813},"Greater productivity and competitiveness",[],{},{"nodeType":243,"data":815,"content":816},{},[817],{"nodeType":247,"value":818,"marks":819,"data":820},"SaaS has empowered employees to self-adopt the tools that will help them do their jobs better. This is something that should be harnessed, not resisted. A more productive workforce creates a more competitive company. Security’s job is to manage the risks it introduces to a level that the business can accept, not to eliminate those risks altogether. ",[],{},{"nodeType":243,"data":822,"content":823},{},[824],{"nodeType":247,"value":825,"marks":826,"data":827},"Balancing productivity returns with cyber risk requires employees and security to work together to understand the trade-off and make the best decision for the whole organization. If you can facilitate this collaboration to make better decisions, faster as to what technology and tools your organization can safely take advantage of, then your organization will be more competitive and more successful.  ",[],{},{"nodeType":279,"data":829,"content":830},{},[831],{"nodeType":247,"value":832,"marks":833,"data":834},"You can secure SaaS without pissing off employees",[],{},{"nodeType":243,"data":836,"content":837},{},[838],{"nodeType":247,"value":839,"marks":840,"data":841},"We’ll end this blog with a single key takeaway: ",[],{},{"nodeType":843,"data":844,"content":845},"hr",{},[],{"nodeType":243,"data":847,"content":848},{},[849],{"nodeType":247,"value":850,"marks":851,"data":852},"To keep employees happy and productive while still securing corporate data, you need to work with them to understand what they need and point them at the most secure SaaS alternative. ",[],{},{"nodeType":843,"data":854,"content":855},{},[],{"nodeType":243,"data":857,"content":858},{},[859],{"nodeType":247,"value":860,"marks":861,"data":862},"One of the big wins that’s really hard to measure or quantify is that by working with employees, you position yourself as a business enabler. The more you know about the tools employees are choosing to use, the more you understand their needs and desires so that you can find a balanced solution.",[],{},{"nodeType":243,"data":864,"content":865},{},[866],{"nodeType":247,"value":867,"marks":868,"data":869},"We would never recommend that you just open the gates to SaaS and leave employees to sign up with wild abandon, but strictly locking down SaaS clearly doesn’t work. With more SaaS apps coming to market daily, the only approach that can scale and keep up with employees’ needs for productivity and flexibility is one that makes them part of the conversation. You’ve got to work with the SaaS users and empathize with their needs. Only then can you really create a cloud security strategy that’s going to work in the real world. With new tools that can do the heavy lifting for you, a user-powered approach finally makes sense. You got this.",[],{},{"entries":871},{"hyperlink":872,"inline":873,"block":874},[],[],[875],{"sys":876,"__typename":877,"title":878,"caption":62,"layoutMode":62,"file":879},{"id":382},"Image","SaaS Risk checklist",{"url":880,"width":881,"height":881},"https://images.ctfassets.net/y1cdw1ablpvd/3k9PBx2owoAsp0IUd6roHE/80898d4779f70c75d3e619c0568c6200/checklist-v5__1_.png",730,"json",{"items":884},[],{},"Manage the risk of unsanctioned SaaS in 5 steps","2022-08-11T00:00:00.000Z",{"items":889},[890,1487,1961],{"__typename":891,"sys":892,"content":894,"title":1463,"synopsis":1464,"hashTags":1465,"publishedDate":1471,"slug":1472,"tagsCollection":1473,"authorsCollection":1483},"BlogPosts",{"id":893},"45iZ69EdPF4629gZ6yf7p5",{"json":895},{"data":896,"content":897,"nodeType":239},{},[898,905,912,919,926,933,958,965,972,979,986,998,1005,1045,1070,1077,1084,1100,1107,1114,1130,1137,1145,1161,1168,1175,1182,1190,1197,1204,1211,1239,1302,1309,1316,1323,1339,1346,1362,1369,1381,1388,1409,1415,1432],{"data":899,"content":900,"nodeType":243},{},[901],{"data":902,"marks":903,"value":904,"nodeType":247},{},[],"Over the past few years, there’s been massive growth in the number of SaaS apps used for work. With that comes new challenges – how do you allow employees to take advantage of all the SaaS the world has to offer without locking it all down and stifling innovation? How do you figure out if you can trust all these new third parties with access to your data? Well, the first step is figuring out which apps employees are actually using, so that’s where we’re starting.",{"data":906,"content":907,"nodeType":243},{},[908],{"data":909,"marks":910,"value":911,"nodeType":247},{},[],"We’ve compiled a list of various options and approaches we’ve seen people take to SaaS discovery, each with their own pros and cons. ",{"data":913,"content":914,"nodeType":279},{},[915],{"data":916,"marks":917,"value":918,"nodeType":247},{},[],"Why is SaaS discovery so hard?",{"data":920,"content":921,"nodeType":243},{},[922],{"data":923,"marks":924,"value":925,"nodeType":247},{},[],"\nSomething to note straight off the bat is that with all the data-driven approaches we’re about to cover, you have to know how to extract SaaS use out of that data. That’s one of the reasons SaaS discovery is so hard. With the roll-your-own approaches in this post, you’ll be able to identify some common apps (like Trello, Slack, Dropbox, etc.), but what about all the new or lesser-known apps? Unfortunately, trying to keep track of all the SaaS apps that are available to employees is really difficult. There’s not really a great master list available on the Internet for you to cross-reference with your data.",{"data":927,"content":928,"nodeType":243},{},[929],{"data":930,"marks":931,"value":932,"nodeType":247},{},[],"That means that all of these roll-your-own approaches are dependent on you knowing what you’re looking for. If you must know what SaaS you’re looking for in order to determine if an asset is actually a SaaS app, you’re going to be left with quite a few blindspots given there seem to be new apps launching every day. ",{"data":934,"content":935,"nodeType":243},{},[936,940,945,949,954],{"data":937,"marks":938,"value":939,"nodeType":247},{},[],"The second hurdle with a roll-your-own discovery approach is differentiating between SaaS ",{"data":941,"marks":942,"value":944,"nodeType":247},{},[943],{"type":255},"access",{"data":946,"marks":947,"value":948,"nodeType":247},{},[]," and SaaS ",{"data":950,"marks":951,"value":953,"nodeType":247},{},[952],{"type":255},"usage",{"data":955,"marks":956,"value":957,"nodeType":247},{},[],". Just because an employee accesses a SaaS website, it doesn’t mean they’re using their app. Most of the data sources will produce a ton of domains, IPs, etc. for you to sift through, but differentiating access and usage based on this information alone will produce a large number of false positives unless you can correlate it with other data sources (we suggest some below). You will likely also want to know things like exactly who the users, owners and administrators of the app are which will be all but impossible from this “access” data alone.",{"data":959,"content":960,"nodeType":243},{},[961],{"data":962,"marks":963,"value":964,"nodeType":247},{},[],"If we ignore for the moment the difficulties in extracting information about SaaS usage, let’s run through your options for data sources and see which ones will give you the most useful data.",{"data":966,"content":967,"nodeType":279},{},[968],{"data":969,"marks":970,"value":971,"nodeType":247},{},[],"Collecting financial records",{"data":973,"content":974,"nodeType":243},{},[975],{"data":976,"marks":977,"value":978,"nodeType":247},{},[],"Looking through invoices can provide some visibility into paid SaaS apps, which is probably the lowest false positive data source. However, there are blind spots - you won’t see any free tier or trial accounts, nor will you get any useful business context about who’s using it, how they’re using it, if logins are secure, and what data it has access to. That said, it’s a quick and dirty way to get a partial view of SaaS usage, and might be the best place to start.",{"data":980,"content":981,"nodeType":279},{},[982],{"data":983,"marks":984,"value":985,"nodeType":247},{},[],"Network-level",{"data":987,"content":988,"nodeType":243},{},[989,993],{"data":990,"marks":991,"value":992,"nodeType":247},{},[],"\n",{"data":994,"marks":995,"value":997,"nodeType":247},{},[996],{"type":255},"Summary: Network level data is the standard old-school approach. If you already have great network monitoring in place it provides fairly broad visibility. There are some very key limitations especially around inferring usage from access, as well as outside the office visibility problems.",{"data":999,"content":1000,"nodeType":243},{},[1001],{"data":1002,"marks":1003,"value":1004,"nodeType":247},{},[],"SaaS apps are accessed over a network - and so that seems like a sensible place to start looking for them. What if we just tried looking for all users accessing a SaaS app’s website? Let’s say we want to see if anyone is using e.g. Dropbox, so we do a Google search for all Dropbox domains and we find Dropbox.com, and a few regional domains as well. We then set about finding employees accessing those domains in our network logs - simple! Perhaps not so much…",{"data":1006,"content":1007,"nodeType":243},{},[1008,1012,1016,1020,1025,1029,1033,1037,1041],{"data":1009,"marks":1010,"value":1011,"nodeType":247},{},[],"As we mentioned in the intro, the best outcome you can hope for is to uncover SaaS ",{"data":1013,"marks":1014,"value":944,"nodeType":247},{},[1015],{"type":255},{"data":1017,"marks":1018,"value":1019,"nodeType":247},{},[],", not ",{"data":1021,"marks":1022,"value":1024,"nodeType":247},{},[1023],{"type":255},"usage.",{"data":1026,"marks":1027,"value":1028,"nodeType":247},{},[]," This might seem like a subtle difference, but SaaS usage is what you want to find, not just information about which employees visited a SaaS website. If you’re looking at all app ",{"data":1030,"marks":1031,"value":944,"nodeType":247},{},[1032],{"type":255},{"data":1034,"marks":1035,"value":1036,"nodeType":247},{},[],", you’ll wind up with a massive list of SaaS, with only a portion of it indicating SaaS ",{"data":1038,"marks":1039,"value":953,"nodeType":247},{},[1040],{"type":255},{"data":1042,"marks":1043,"value":1044,"nodeType":247},{},[],".",{"data":1046,"content":1047,"nodeType":243},{},[1048,1052,1057,1061,1066],{"data":1049,"marks":1050,"value":1051,"nodeType":247},{},[],"Since you can’t discover app ",{"data":1053,"marks":1054,"value":1056,"nodeType":247},{},[1055],{"type":255},"usage ",{"data":1058,"marks":1059,"value":1060,"nodeType":247},{},[],"with network data, you’d have to tie network traffic to a single employee to identify the user, then reach out to each employee to understand the business context of how they’re using the app. A network data approach can work ",{"data":1062,"marks":1063,"value":1065,"nodeType":247},{},[1064],{"type":255},"if",{"data":1067,"marks":1068,"value":1069,"nodeType":247},{},[]," you have time to get that context by asking employees if they’re using the SaaS detected or by corroborating your findings with subscription invoices from the finance team. ",{"data":1071,"content":1072,"nodeType":243},{},[1073],{"data":1074,"marks":1075,"value":1076,"nodeType":247},{},[],"A few ways to collect SaaS data on the network level are ingesting firewall, web proxy and DNS and VPN logs. These inputs can give you some additional visibility into SaaS access, but you may still be left with significant blind spots to actual usage if you assume it all takes place on the corporate network using a VPN. It’s also a painfully tedious process. That said, a manual process still is better than having no SaaS visibility at all. ",{"data":1078,"content":1079,"nodeType":279},{},[1080],{"data":1081,"marks":1082,"value":1083,"nodeType":247},{},[],"Endpoint-level",{"data":1085,"content":1086,"nodeType":243},{},[1087,1092,1095],{"data":1088,"marks":1089,"value":1091,"nodeType":247},{},[1090],{"type":255},"Summary: Endpoint",{"data":1093,"marks":1094,"value":729,"nodeType":247},{},[],{"data":1096,"marks":1097,"value":1099,"nodeType":247},{},[1098],{"type":255},"data is hard to get, and of limited value. However, it may be useful if you already have this data available in a SIEM or if it’s otherwise easy to query.",{"data":1101,"content":1102,"nodeType":243},{},[1103],{"data":1104,"marks":1105,"value":1106,"nodeType":247},{},[],"Perhaps we’ll get closer to what we need (usage data instead of just access data and a low false positive rate) if we move up a level and get closer to the users? Users are going to be accessing the SaaS apps through some kind of endpoint and there are some things you could use to do discovery if you have some monitoring capability on that endpoint.",{"data":1108,"content":1109,"nodeType":243},{},[1110],{"data":1111,"marks":1112,"value":1113,"nodeType":247},{},[],"For example, many SaaS apps have desktop or mobile clients (thick clients) you install. You could look for e.g. the Slack client, or the OneDrive sync agent installed on the endpoint. However, many users prefer the in-browser version, so they may not have even installed the thick client and you wouldn’t see their usage by looking at their endpoint data. ",{"data":1115,"content":1116,"nodeType":243},{},[1117,1121,1126],{"data":1118,"marks":1119,"value":1120,"nodeType":247},{},[],"All the good data, the application level data, is in the browser, which is technically on the endpoint but not really accessible ",{"data":1122,"marks":1123,"value":1125,"nodeType":247},{},[1124],{"type":255},"through the endpoint",{"data":1127,"marks":1128,"value":1129,"nodeType":247},{},[]," without doing something very hacky. Perhaps we need to go a level deeper - either closer to the application or get inside the browser.",{"data":1131,"content":1132,"nodeType":279},{},[1133],{"data":1134,"marks":1135,"value":1136,"nodeType":247},{},[],"Application-level",{"data":1138,"content":1139,"nodeType":243},{},[1140],{"data":1141,"marks":1142,"value":1144,"nodeType":247},{},[1143],{"type":255},"Summary: Application level integrations are very useful for discovering unsanctioned SaaS apps that are integrated with the SaaS apps you already know about. But when used in isolation, they have massive blind spots. Application-level data is also a goldmine for finding out how securely employees use the app.",{"data":1146,"content":1147,"nodeType":243},{},[1148,1152,1157],{"data":1149,"marks":1150,"value":1151,"nodeType":247},{},[],"Focusing on the SaaS app directly makes a lot of sense if you need to get really high quality usage data. The challenge is that you need to integrate with the SaaS app to get at this data. And you can’t just integrate with an app like Slack or Trello. In general, these integrations must be within a specific account or tenant that your employees are using if you want to see any of their usage or security data. So, if you must already know about the tenant to discover the SaaS - is this approach useless for detecting unknown SaaS? Maybe, ",{"data":1153,"marks":1154,"value":1156,"nodeType":247},{},[1155],{"type":255},"but ",{"data":1158,"marks":1159,"value":1160,"nodeType":247},{},[],"there are some very useful edge cases.",{"data":1162,"content":1163,"nodeType":243},{},[1164],{"data":1165,"marks":1166,"value":1167,"nodeType":247},{},[],"For instance, integrations with SaaS apps that are known and sanctioned can be very useful, especially with those apps that are identity providers, like Microsoft Azure/365 and Google Workspace. Lots of SaaS apps let users login with another SaaS app, which is called social login or sometimes single sign-on (SSO). When a user does “login using Google” on Salesforce using their corporate Google account, they are actually integrating (in a very limited way) Salesforce with Google Workspace. If you have application-level access (normally by calling the APIs) to known SaaS apps, you can discover these social logins (among other) integrations with other SaaS apps. These SaaS-to-SaaS links then become very useful as a discovery mechanism.",{"data":1169,"content":1170,"nodeType":243},{},[1171],{"data":1172,"marks":1173,"value":1174,"nodeType":247},{},[],"Something else to keep in mind, application-level access to known SaaS can also be incredibly useful for security beyond simple SaaS discovery. You could check authentication controls, like which users don’t have MFA enabled, sharing settings (perhaps the SaaS allows you to share documents publicly), unusual login events, other anomalous behavior, and so on. ",{"data":1176,"content":1177,"nodeType":279},{},[1178],{"data":1179,"marks":1180,"value":1181,"nodeType":247},{},[],"Browser-level  ",{"data":1183,"content":1184,"nodeType":243},{},[1185],{"data":1186,"marks":1187,"value":1189,"nodeType":247},{},[1188],{"type":255},"Summary: Browser data is as good as you can get for SaaS discovery, but with the downside that you must build and deploy a browser extension to get at it.",{"data":1191,"content":1192,"nodeType":243},{},[1193],{"data":1194,"marks":1195,"value":1196,"nodeType":247},{},[],"What if I told you, you could get application level usage-data beyond what events the applications expose through their APIs without needing to know about the app first or fighting network encryption? The other methods in this guide allow you to get at the data using normal log processing techniques, SIEM queries, or even hacky scripts that call APIs, but there’s one reasonable option for SaaS discovery.",{"data":1198,"content":1199,"nodeType":243},{},[1200],{"data":1201,"marks":1202,"value":1203,"nodeType":247},{},[],"The only real viable way to get at this SaaS usage data is through a browser extension. The big hurdle with this approach is that browser extensions require you to develop an extension and a backend where it can send data…AND you need to deploy that extension to all employees. ",{"data":1205,"content":1206,"nodeType":243},{},[1207],{"data":1208,"marks":1209,"value":1210,"nodeType":247},{},[],"Deploying that browser extension might be as simple as setting the extension to default install itself in all managed browsers - that’s possible if you’re using Google Workspace. In other environments, it may be a bit more of a challenge. Fortunately, browser extensions don’t have the complexity of normal endpoint agents. They don’t have runtime dependencies, aren’t platform dependent, don’t need admin permissions to install, have automatic update mechanisms built-in, and don’t affect performance. At the end of the day, they’re just a special piece of JavaScript running in the browser.",{"data":1212,"content":1213,"nodeType":243},{},[1214,1218,1223,1227,1235],{"data":1215,"marks":1216,"value":1217,"nodeType":247},{},[],"If you ",{"data":1219,"marks":1220,"value":1222,"nodeType":247},{},[1221],{"type":401},"are",{"data":1224,"marks":1225,"value":1226,"nodeType":247},{},[]," able to get access to the data in the browser (spoiler alert: we provide an easy - and free - out-of-the-box ",{"data":1228,"content":1230,"nodeType":304},{"uri":1229},"/features/saas-discovery/",[1231],{"data":1232,"marks":1233,"value":1234,"nodeType":247},{},[],"browser extension for SaaS discovery",{"data":1236,"marks":1237,"value":1238,"nodeType":247},{},[],"), there is almost limitless scope to what you can do with this data. You can observe not only access to SaaS websites, you can also see:",{"data":1240,"content":1241,"nodeType":549},{},[1242,1252,1262,1272,1282,1292],{"data":1243,"content":1244,"nodeType":391},{},[1245],{"data":1246,"content":1247,"nodeType":243},{},[1248],{"data":1249,"marks":1250,"value":1251,"nodeType":247},{},[],"the user login,",{"data":1253,"content":1254,"nodeType":391},{},[1255],{"data":1256,"content":1257,"nodeType":243},{},[1258],{"data":1259,"marks":1260,"value":1261,"nodeType":247},{},[],"whether that login was successful,",{"data":1263,"content":1264,"nodeType":391},{},[1265],{"data":1266,"content":1267,"nodeType":243},{},[1268],{"data":1269,"marks":1270,"value":1271,"nodeType":247},{},[],"whether they used MFA to login, ",{"data":1273,"content":1274,"nodeType":391},{},[1275],{"data":1276,"content":1277,"nodeType":243},{},[1278],{"data":1279,"marks":1280,"value":1281,"nodeType":247},{},[],"which email they used to login, ",{"data":1283,"content":1284,"nodeType":391},{},[1285],{"data":1286,"content":1287,"nodeType":243},{},[1288],{"data":1289,"marks":1290,"value":1291,"nodeType":247},{},[],"whether they are the owner/administrator of the SaaS app tenant, and ",{"data":1293,"content":1294,"nodeType":391},{},[1295],{"data":1296,"content":1297,"nodeType":243},{},[1298],{"data":1299,"marks":1300,"value":1301,"nodeType":247},{},[],"all their behavior and settings in the app. ",{"data":1303,"content":1304,"nodeType":243},{},[1305],{"data":1306,"marks":1307,"value":1308,"nodeType":247},{},[],"Best of all, there is no need to stream all this data to a single collection point where it becomes a privacy nightmare. By writing rules in the extension to look for specific issues, you can flag only security relevant events, redacted or anonymized as far as makes sense. You can even limit the scope to only monitor the app use when the employee logs into the SaaS app using their work account to further avoid employee privacy concerns. ",{"data":1310,"content":1311,"nodeType":243},{},[1312],{"data":1313,"marks":1314,"value":1315,"nodeType":247},{},[],"There’s a quick and easy solution to get the best out of the application and browser data approaches we’ve written about in the last two sections - and that’s with our free tool.",{"data":1317,"content":1318,"nodeType":279},{},[1319],{"data":1320,"marks":1321,"value":1322,"nodeType":247},{},[],"How can Push help?",{"data":1324,"content":1325,"nodeType":243},{},[1326,1330,1335],{"data":1327,"marks":1328,"value":1329,"nodeType":247},{},[],"We found that the most comprehensive approach is to collect data from ",{"data":1331,"marks":1332,"value":1334,"nodeType":247},{},[1333],{"type":255},"both ",{"data":1336,"marks":1337,"value":1338,"nodeType":247},{},[],"the application and browser level to give you full visibility and actionable security information. With our browser extension, we get full breadth of coverage so you can discover all SaaS usage and with our APIs, you get the depth of coverage you need to understand how employees are using SaaS and if they’re doing so securely. Our combined approach captures SaaS logins and adoption, in real-time, and provides the best visibility and context for security teams. ",{"data":1340,"content":1341,"nodeType":691},{},[1342],{"data":1343,"marks":1344,"value":1345,"nodeType":247},{},[],"Fixing SaaS security issues automatically by partnering with employees  ",{"data":1347,"content":1348,"nodeType":243},{},[1349,1353,1358],{"data":1350,"marks":1351,"value":1352,"nodeType":247},{},[],"\nWhat we then do with that data is where the magic happens… we can automatically guide employees via ChatOps (Slack and Teams for now, more to come!) to improve SaaS security. Some of those messages will help us enrich our data by asking employees questions they’ll actually know the answers to (",{"data":1354,"marks":1355,"value":1357,"nodeType":247},{},[1356],{"type":255},"“You logged into Slack from Mexico just now. Are you in Mexico?”",{"data":1359,"marks":1360,"value":1361,"nodeType":247},{},[],"), which provides you with a good snapshot of SaaS usage in your business and lets you make informed security decisions about SaaS use to better manage risks.",{"data":1363,"content":1364,"nodeType":243},{},[1365],{"data":1366,"marks":1367,"value":1368,"nodeType":247},{},[],"Employees can also make immediate improvements to your overall security posture. In case you’re curious about what that looks like, some of the prompts we push to employees are things like: ",{"data":1370,"content":1371,"nodeType":243},{},[1372,1377],{"data":1373,"marks":1374,"value":1376,"nodeType":247},{},[1375],{"type":255},"“We noticed this SaaS app you’re using has access to all your emails, are you still using it?” Y/N.",{"data":1378,"marks":1379,"value":1380,"nodeType":247},{},[]," If not, they can click a button to remove it and you’ll get an immediate reduction of your attack surface. ",{"data":1382,"content":1383,"nodeType":243},{},[1384],{"data":1385,"marks":1386,"value":1387,"nodeType":247},{},[],"Or ",{"data":1389,"content":1390,"nodeType":243},{},[1391,1396,1400,1405],{"data":1392,"marks":1393,"value":1395,"nodeType":247},{},[1394],{"type":255},"“It looks like you’re not using MFA for your account on this SaaS app. Can we get this set up really quickly?”",{"data":1397,"marks":1398,"value":1399,"nodeType":247},{},[]," or “",{"data":1401,"marks":1402,"value":1404,"nodeType":247},{},[1403],{"type":255},"An app you installed called ‘Dropbox’ is not the official Dropbox app, click here to remove it and install the verified app instead.”",{"data":1406,"marks":1407,"value":1408,"nodeType":247},{},[]," ",{"data":1410,"content":1414,"nodeType":378},{"target":1411},{"sys":1412},{"id":1413,"type":383,"linkType":384},"27MpbzErmDfAC3bA4dBibv",[],{"data":1416,"content":1417,"nodeType":243},{},[1418,1422,1429],{"data":1419,"marks":1420,"value":1421,"nodeType":247},{},[],"If you’re interested in learning more, check out how we can ",{"data":1423,"content":1424,"nodeType":304},{"uri":1229},[1425],{"data":1426,"marks":1427,"value":1428,"nodeType":247},{},[],"help you discover SaaS use and secure it",{"data":1430,"marks":1431,"value":1044,"nodeType":247},{},[],{"data":1433,"content":1434,"nodeType":243},{},[1435,1439,1447,1451,1459],{"data":1436,"marks":1437,"value":1438,"nodeType":247},{},[],"We’ll also be publishing a SaaS Discovery Evaluation Guide that will explore all the off-the-shelf tools you may consider and evaluate which one is the best fit for your needs as this really does depend on your tech stack. In that, we’ll share our experiences with those products and discuss what additional coverage and context they can provide, as well as where they fall short. Subscribe to our mailing list and follow us on ",{"data":1440,"content":1442,"nodeType":304},{"uri":1441},"https://twitter.com/PushSecurity",[1443],{"data":1444,"marks":1445,"value":1446,"nodeType":247},{},[],"Twitter @pushsecurity",{"data":1448,"marks":1449,"value":1450,"nodeType":247},{},[]," or ",{"data":1452,"content":1454,"nodeType":304},{"uri":1453},"https://www.linkedin.com/company/push-security",[1455],{"data":1456,"marks":1457,"value":1458,"nodeType":247},{},[],"LinkedIn",{"data":1460,"marks":1461,"value":1462,"nodeType":247},{},[]," to get a head’s up when that’s live so you can have a read.","How to roll-your-own SaaS discovery","We’ve compiled some methods for discovering SaaS. Lets explore each approach and learn new ways to discover unknown SaaS, capture SaaS use, and secure it.",[1466,1467,1468,1469,1470],"itassetdiscovery","saassecurity","saasdiscovery","sass","cloudfirst","2022-05-03T00:00:00.000+01:00","rolling-your-own-saas-discovery",{"items":1474},[1475,1479],{"sys":1476,"name":1478},{"id":1477},"3SA5H01UkKauuiTdt0KC6q","Shadow IT",{"sys":1480,"name":1482},{"id":1481},"3pjES4THCIfSAwhGdNwBcy","Browser security",{"items":1484},[1485],{"fullName":232,"firstName":233,"jobTitle":234,"profilePicture":1486},{"url":236},{"__typename":891,"sys":1488,"content":1490,"title":1941,"synopsis":1942,"hashTags":62,"publishedDate":1943,"slug":1944,"tagsCollection":1945,"authorsCollection":1953},{"id":1489},"6yiDFGYTMw79qmErstqRqp",{"json":1491},{"data":1492,"content":1493,"nodeType":239},{},[1494,1527,1530,1537,1544,1550,1557,1573,1580,1587,1607,1666,1669,1676,1747,1763,1770,1777,1797,1804,1825,1832,1839,1846,1853,1860,1867,1873,1880,1887,1903,1906,1924],{"data":1495,"content":1496,"nodeType":243},{},[1497,1501,1510,1514,1523],{"data":1498,"marks":1499,"value":1500,"nodeType":247},{},[],"Despite measures by Microsoft to address the issue, ",{"data":1502,"content":1504,"nodeType":304},{"uri":1503},"https://www.microsoft.com/security/blog/2021/07/14/microsoft-delivers-comprehensive-solution-to-battle-rise-in-consent-phishing-emails/",[1505],{"data":1506,"marks":1507,"value":1509,"nodeType":247},{},[1508],{"type":297},"consent phishing is still on the rise",{"data":1511,"marks":1512,"value":1513,"nodeType":247},{},[],". (Not sure what consent phishing is? ",{"data":1515,"content":1517,"nodeType":304},{"uri":1516},"https://pushsecurity.com/blog/consent-phishing-the-emerging-phishing-technique-that-can-bypass-2fa/",[1518],{"data":1519,"marks":1520,"value":1522,"nodeType":247},{},[1521],{"type":297},"Read more here",{"data":1524,"marks":1525,"value":1526,"nodeType":247},{},[],"). Although prevention is best, how do you check this hasn’t already happened? ",{"data":1528,"content":1529,"nodeType":843},{},[],{"data":1531,"content":1532,"nodeType":243},{},[1533],{"data":1534,"marks":1535,"value":1536,"nodeType":247},{},[],"First, a bit of background on how OAuth apps work in Microsoft 365.",{"data":1538,"content":1539,"nodeType":243},{},[1540],{"data":1541,"marks":1542,"value":1543,"nodeType":247},{},[],"When you install an OAuth app in Microsoft 365, you see something like the familiar consent screen below, which shows the app's name and the permissions it's asking for. Once you've given your consent, behind the scenes a “service principal” is created in your tenant - this is your instance of the app. When the app does whatever the app is supposed to do (e.g. inspect your calendar, manage your to-do list etc.), it does it via this service principal.",{"data":1545,"content":1549,"nodeType":378},{"target":1546},{"sys":1547},{"id":1548,"type":383,"linkType":384},"6nPueTKEjLphqlytbQ0gcx",[],{"data":1551,"content":1552,"nodeType":243},{},[1553],{"data":1554,"marks":1555,"value":1556,"nodeType":247},{},[],"The app is able to authenticate to do this using a token that it is sent during the consent process. If you look closely at the URL you visit to get to the consent screen (example below), you’ll see there is a reply URL parameter - this is telling Microsoft where to send the token when a user consents:",{"data":1558,"content":1559,"nodeType":243},{},[1560,1564,1569],{"data":1561,"marks":1562,"value":1563,"nodeType":247},{},[],"https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=\u003Cclient_id>&response_type=code&",{"data":1565,"marks":1566,"value":1568,"nodeType":247},{},[1567],{"type":401},"redirect_uri=https%3A%2F%pushsecurity.com ",{"data":1570,"marks":1571,"value":1572,"nodeType":247},{},[],"&response_mode=query&scope=https%3A%2F%2Fgraph.microsoft.com%2F calendars.read%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.send&state=12345",{"data":1574,"content":1575,"nodeType":243},{},[1576],{"data":1577,"marks":1578,"value":1579,"nodeType":247},{},[],"The app uses this token to authenticate as the service principal to then do whatever it’s supposed to do. In case your hacker brain is getting ahead of itself, you can’t change the reply URL to any old value to steal tokens. The app developer specifies a list of URLs that are allowed to be used here in the app’s manifest - more on that later.",{"data":1581,"content":1582,"nodeType":243},{},[1583],{"data":1584,"marks":1585,"value":1586,"nodeType":247},{},[],"Until recently, this ecosystem was a bit of a wild west. Although you can publish apps in the official app store, you don’t have to. Attackers were able to create an app on their tenant and then send consent URLs encouraging victims to grant them access, often having great success. ",{"data":1588,"content":1589,"nodeType":243},{},[1590,1594,1603],{"data":1591,"marks":1592,"value":1593,"nodeType":247},{},[],"In October 2020, ",{"data":1595,"content":1597,"nodeType":304},{"uri":1596},"https://techcommunity.microsoft.com/t5/azure-active-directory-identity/publisher-verification-and-app-consent-policies-are-now/ba-p/1257374",[1598],{"data":1599,"marks":1600,"value":1602,"nodeType":247},{},[1601],{"type":297},"Microsoft released “Publisher verification”",{"data":1604,"marks":1605,"value":1606,"nodeType":247},{},[],", allowing developers to be vetted by Microsoft and get a badge of approval on their consent screens. The following month, Microsoft changed policies so users, by default, weren't allowed to consent to apps that didn't come from a verified publisher. This makes a consent phishing attack much more difficult for attackers who are now left with the following options:",{"data":1608,"content":1609,"nodeType":549},{},[1610,1633,1656],{"data":1611,"content":1612,"nodeType":391},{},[1613],{"data":1614,"content":1615,"nodeType":243},{},[1616,1620,1629],{"data":1617,"marks":1618,"value":1619,"nodeType":247},{},[],"Find a tenant that allows users to consent to non-verified apps. The default should have been changed for all to not allow this but you can change it back (in case you’re curious, ",{"data":1621,"content":1623,"nodeType":304},{"uri":1622},"https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-user-consent?tabs=azure-portal",[1624],{"data":1625,"marks":1626,"value":1628,"nodeType":247},{},[1627],{"type":297},"see how to check your own settings here",{"data":1630,"marks":1631,"value":1632,"nodeType":247},{},[],").",{"data":1634,"content":1635,"nodeType":391},{},[1636],{"data":1637,"content":1638,"nodeType":243},{},[1639,1643,1652],{"data":1640,"marks":1641,"value":1642,"nodeType":247},{},[],"Go through the publisher verification process anyway: the process is ",{"data":1644,"content":1646,"nodeType":304},{"uri":1645},"https://docs.microsoft.com/en-gb/azure/active-directory/develop/publisher-verification-overview#requirements",[1647],{"data":1648,"marks":1649,"value":1651,"nodeType":247},{},[1650],{"type":297},"detailed here",{"data":1653,"marks":1654,"value":1655,"nodeType":247},{},[],". It’s probably possible to trick but requires mocking a real company which is going to be expensive and hard to scale.",{"data":1657,"content":1658,"nodeType":391},{},[1659],{"data":1660,"content":1661,"nodeType":243},{},[1662],{"data":1663,"marks":1664,"value":1665,"nodeType":247},{},[],"Compromise an already verified publisher: definitely adds cost and complexity to an attack but would be an extremely valuable and effective approach - how much do you trust the security of all your app publishers?",{"data":1667,"content":1668,"nodeType":843},{},[],{"data":1670,"content":1671,"nodeType":243},{},[1672],{"data":1673,"marks":1674,"value":1675,"nodeType":247},{},[],"So let’s look for some malicious apps...",{"data":1677,"content":1678,"nodeType":243},{},[1679,1683,1692,1696,1705,1709,1718,1722,1731,1735,1743],{"data":1680,"marks":1681,"value":1682,"nodeType":247},{},[],"The Azure AD interface to inspect OAuth apps, or service principals, is the ",{"data":1684,"content":1686,"nodeType":304},{"uri":1685},"https://portal.azure.com/#blade/Microsoft_AAD_IAM/StartboardApplicationsMenuBlade/AllApps/menuId/",[1687],{"data":1688,"marks":1689,"value":1691,"nodeType":247},{},[1690],{"type":297},"Enterprise Applications blade",{"data":1693,"marks":1694,"value":1695,"nodeType":247},{},[]," but it’s lacking key information you need for this exercise like the reply URLs and publisher status. You might be able to see similar info if you have the licenses for ",{"data":1697,"content":1699,"nodeType":304},{"uri":1698},"https://docs.microsoft.com/en-gb/cloud-app-security/what-is-cloud-app-security",[1700],{"data":1701,"marks":1702,"value":1704,"nodeType":247},{},[1703],{"type":297},"Cloud App Security",{"data":1706,"marks":1707,"value":1708,"nodeType":247},{},[]," but they’re expensive - you can also get full information about service principals from ",{"data":1710,"content":1712,"nodeType":304},{"uri":1711},"https://docs.microsoft.com/en-us/graph/api/resources/serviceprincipal?view=graph-rest-1.0",[1713],{"data":1714,"marks":1715,"value":1717,"nodeType":247},{},[1716],{"type":297},"Graph API",{"data":1719,"marks":1720,"value":1721,"nodeType":247},{},[],", or ",{"data":1723,"content":1725,"nodeType":304},{"uri":1724},"https://docs.microsoft.com/en-us/powershell/module/az.resources/get-azadserviceprincipal?view=azps-6.3.0",[1726],{"data":1727,"marks":1728,"value":1730,"nodeType":247},{},[1729],{"type":297},"PowerShell",{"data":1732,"marks":1733,"value":1734,"nodeType":247},{},[]," (is it too early to say that ",{"data":1736,"content":1738,"nodeType":304},{"uri":1737},"/features/secure-oauth-permissions-and-applications/",[1739],{"data":1740,"marks":1741,"value":1742,"nodeType":247},{},[],"Push can also solve this problem",{"data":1744,"marks":1745,"value":1746,"nodeType":247},{},[]," for you in only a few button clicks?)",{"data":1748,"content":1749,"nodeType":243},{},[1750,1754,1759],{"data":1751,"marks":1752,"value":1753,"nodeType":247},{},[],"Right off the bat, ",{"data":1755,"marks":1756,"value":1758,"nodeType":247},{},[1757],{"type":401},"we can disregard a lot of the information presented by the app",{"data":1760,"marks":1761,"value":1762,"nodeType":247},{},[],". The app’s name, home page, logo can all be anything an attacker says so if they’re trying to trick a user this will most likely look convincing and legitimate. The best you can do here is sanity check that this app makes sense in the context of your organisation or this user. ",{"data":1764,"content":1765,"nodeType":243},{},[1766],{"data":1767,"marks":1768,"value":1769,"nodeType":247},{},[],"So what is useful?",{"data":1771,"content":1772,"nodeType":691},{},[1773],{"data":1774,"marks":1775,"value":1776,"nodeType":247},{},[],"What can the app do?",{"data":1778,"content":1779,"nodeType":243},{},[1780,1784,1793],{"data":1781,"marks":1782,"value":1783,"nodeType":247},{},[],"Start by prioritising apps by the permissions they’ve been granted. Attackers will often target access to mail, files, or admin functionality so any app that requests these should be subject to more scrutiny and looked at first. As with any security exercise, you’ll know best for what’s sensitive to your organisation so apply that logic here. If you are unsure what a specific permission means, ",{"data":1785,"content":1787,"nodeType":304},{"uri":1786},"https://docs.microsoft.com/en-us/graph/permissions-reference",[1788],{"data":1789,"marks":1790,"value":1792,"nodeType":247},{},[1791],{"type":297},"here's a full reference",{"data":1794,"marks":1795,"value":1796,"nodeType":247},{},[],". ",{"data":1798,"content":1799,"nodeType":691},{},[1800],{"data":1801,"marks":1802,"value":1803,"nodeType":247},{},[],"Access to all data or just specific users?",{"data":1805,"content":1806,"nodeType":243},{},[1807,1811,1822],{"data":1808,"marks":1809,"value":1810,"nodeType":247},{},[],"It’s important to understand the difference between app permissions and delegated permissions. In short, app permissions grant tenant-wide access, delegated permissions grant access as the user. For example, if the app permission Mail.Read was granted to an app, it could read everyone’s email. If the delegated permission Mail.Read was granted to an app, it could only read the mail of the person who granted permission. ",{"data":1812,"content":1816,"nodeType":1821},{"target":1813},{"sys":1814},{"id":1815,"type":383,"linkType":384},"16568b78-3c85-451f-bb62-9d50148ca1b9",[1817],{"data":1818,"marks":1819,"value":1820,"nodeType":247},{},[],"Learn more about app vs. delegated permissions here","entry-hyperlink",{"data":1823,"marks":1824,"value":1044,"nodeType":247},{},[],{"data":1826,"content":1827,"nodeType":691},{},[1828],{"data":1829,"marks":1830,"value":1831,"nodeType":247},{},[],"How many users have installed this app?",{"data":1833,"content":1834,"nodeType":243},{},[1835],{"data":1836,"marks":1837,"value":1838,"nodeType":247},{},[],"If you are the victim of consent phishing, hopefully the attacker only managed to dupe a small number of users, so common advice would be prioritise apps with a low install count. Although this makes sense, it’s often not that practical since, unless you’ve been running a tight ship, you’ll probably find a lot of apps used by one or two people.",{"data":1840,"content":1841,"nodeType":243},{},[1842],{"data":1843,"marks":1844,"value":1845,"nodeType":247},{},[],"On the flip side, app permissions can only be approved by an admin; admins can also consent to delegated permissions on behalf of all users. So apps with these permissions - effectively tenant-wide access - have also probably been approved by only a single user. Hopefully you have more faith in your admins’ ability to spot a phish but you should still treat these as having only been vetted by a single user.",{"data":1847,"content":1848,"nodeType":691},{},[1849],{"data":1850,"marks":1851,"value":1852,"nodeType":247},{},[],"Where the tokens go - the thing you can’t spoof",{"data":1854,"content":1855,"nodeType":243},{},[1856],{"data":1857,"marks":1858,"value":1859,"nodeType":247},{},[],"The only piece of information an app can’t lie about is its reply URLs. As mentioned above, these are the URLs that Microsoft is allowed to send an access token to when a user consents. If the app publisher doesn’t own these domains, they won’t ever receive their token and they can’t use the app’s access. If you can confirm all the reply URLs specified by the app are legitimately owned by the organisation the app is supposed to be from, you can be fairly confident the app is owned by them.",{"data":1861,"content":1862,"nodeType":243},{},[1863],{"data":1864,"marks":1865,"value":1866,"nodeType":247},{},[],"In the interests of keeping this short(er), a guide on domain analysis is probably out of scope. However, here’s a real-world example malicious OAuth app that was pretending to be Salesforce related, using a pretty suspicious looking URL, so you won’t always need deep analysis:",{"data":1868,"content":1872,"nodeType":378},{"target":1869},{"sys":1870},{"id":1871,"type":383,"linkType":384},"1oSdJPeXHsGlAXeX6Q2UOs",[],{"data":1874,"content":1875,"nodeType":691},{},[1876],{"data":1877,"marks":1878,"value":1879,"nodeType":247},{},[],"Is it verified? Does it matter?",{"data":1881,"content":1882,"nodeType":243},{},[1883],{"data":1884,"marks":1885,"value":1886,"nodeType":247},{},[],"You might be tempted to trust any app that is verified by Microsoft. The stamp of verification is clearly worth something but, as mentioned earlier, don’t discount the possibility of a determined attacker compromising a verified publisher to publish their own malicious app or edit an existing one. ",{"data":1888,"content":1889,"nodeType":243},{},[1890,1894,1899],{"data":1891,"marks":1892,"value":1893,"nodeType":247},{},[],"Likewise, you might also find a lot of your service principals, even ones by seemingly reputable publishers, are reported as not verified. This is because the service principal is an instance of the app at the time of install - if the publisher wasn’t verified at that point, the service principal won’t be (even if the publisher has since been verified). Since Microsoft only introduced publisher verification in 2020, all apps installed before this date will report as unverified. For reference, 78% of the service principals we’ve looked at report as having unverified publishers so this isn’t ",{"data":1895,"marks":1896,"value":1898,"nodeType":247},{},[1897],{"type":255},"necessarily",{"data":1900,"marks":1901,"value":1902,"nodeType":247},{},[]," something to worry about. ",{"data":1904,"content":1905,"nodeType":843},{},[],{"data":1907,"content":1908,"nodeType":243},{},[1909,1913,1920],{"data":1910,"marks":1911,"value":1912,"nodeType":247},{},[],"If you find apps that look like they don't belong and you're worried they're the result of consent phishing, as well as removing the app's access (you can do this on the app's Properties page in the ",{"data":1914,"content":1916,"nodeType":304},{"uri":1915},"https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/StartboardApplicationsMenuBlade/AllApps",[1917],{"data":1918,"marks":1919,"value":1691,"nodeType":247},{},[],{"data":1921,"marks":1922,"value":1923,"nodeType":247},{},[],"), you should investigate how the app got there in the first place. A detailed walkthrough of how to fully investigate is coming soon.",{"data":1925,"content":1926,"nodeType":243},{},[1927,1931,1938],{"data":1928,"marks":1929,"value":1930,"nodeType":247},{},[],"You can gather information about the apps in your Microsoft 365 tenant with only a few clicks using the Push platform. See which apps are installed on your tenant, what kind of access they have and if we think any look suspicious. It only takes a few minutes and is totally free! ",{"data":1932,"content":1933,"nodeType":304},{"uri":1737},[1934],{"data":1935,"marks":1936,"value":1937,"nodeType":247},{},[],"Check it out.",{"data":1939,"marks":1940,"value":29,"nodeType":247},{},[],"How to find a malicious OAuth app on Microsoft 365 ","How do you find a malicious Microsoft 365 OAuth app? Learn what to look for, and what to ignore, when checking your users haven't been consent phished.","2021-09-06T00:00:00.000+01:00","how-to-find-a-malicious-oauth-app-on-microsoft-365",{"items":1946},[1947,1949],{"sys":1948,"name":1482},{"id":1481},{"sys":1950,"name":1952},{"id":1951},"4ksQNCFeBf8H4QIORqpRLw","Detection & response",{"items":1954},[1955],{"fullName":1956,"firstName":1957,"jobTitle":1958,"profilePicture":1959},"Andy Waugh","Andy","VP Product",{"url":1960},"https://images.ctfassets.net/y1cdw1ablpvd/3Rf76rJn6S9inMb4dUnAIJ/0a787f8141d05b95300e2fe77c4493fa/DSC_6868.jpg",{"__typename":891,"sys":1962,"content":1964,"title":2342,"synopsis":2343,"hashTags":2344,"publishedDate":2350,"slug":2351,"tagsCollection":2352,"authorsCollection":2358},{"id":1963},"4j5GhBaGwP92nz5p6gmQyi",{"json":1965},{"data":1966,"content":1967,"nodeType":239},{},[1968,1975,1982,1989,1995,2002,2009,2016,2049,2056,2063,2082,2088,2095,2102,2120,2126,2133,2152,2158,2194,2222,2228,2243,2270,2276,2283,2290,2296,2322,2329,2336],{"data":1969,"content":1970,"nodeType":691},{},[1971],{"data":1972,"marks":1973,"value":1974,"nodeType":247},{},[],"What are user delegated OAuth tokens?",{"data":1976,"content":1977,"nodeType":243},{},[1978],{"data":1979,"marks":1980,"value":1981,"nodeType":247},{},[],"When users want to integrate a 3rd party app (like Zoom, Slack, Zapier, etc. etc.) with Google Workspace (or Office 365, or almost any SaaS platform these days really), they provide that app with a token (an OAuth2 token to be specific). This token can be used by the 3rd party to connect to your Workspace to gain access to that user’s data instead of a password.",{"data":1983,"content":1984,"nodeType":243},{},[1985],{"data":1986,"marks":1987,"value":1988,"nodeType":247},{},[],"You might recognise screens like this which actually do the job of granting these tokens.",{"data":1990,"content":1994,"nodeType":378},{"target":1991},{"sys":1992},{"id":1993,"type":383,"linkType":384},"1jj3BNK8zO0Pm83LwzLUJp",[],{"data":1996,"content":1997,"nodeType":243},{},[1998],{"data":1999,"marks":2000,"value":2001,"nodeType":247},{},[],"That list of permissions is a human readable version of what are called scopes. Scopes limit what the 3rd party can do with the token. There are a number of ways you can limit the 3rd parties and scopes your users can authorise, and we’ll cover those in future blog posts - for now we are focussing on the existing tokens that have already been granted.",{"data":2003,"content":2004,"nodeType":691},{},[2005],{"data":2006,"marks":2007,"value":2008,"nodeType":247},{},[],"Why would you want to review these apps and tokens?",{"data":2010,"content":2011,"nodeType":243},{},[2012],{"data":2013,"marks":2014,"value":2015,"nodeType":247},{},[],"Essentially there are quite a few things that can go wrong here, which is not unexpected when we are talking about granting 3rd parties access to a core business platform like Workspace - and perhaps in something like an ordering of obviousness they are things like:",{"data":2017,"content":2018,"nodeType":549},{},[2019,2029,2039],{"data":2020,"content":2021,"nodeType":391},{},[2022],{"data":2023,"content":2024,"nodeType":243},{},[2025],{"data":2026,"marks":2027,"value":2028,"nodeType":247},{},[],"Consent phishing - where an attacker uses a malicious app linked in an email to trick users into giving them access to the user's data.",{"data":2030,"content":2031,"nodeType":391},{},[2032],{"data":2033,"content":2034,"nodeType":243},{},[2035],{"data":2036,"marks":2037,"value":2038,"nodeType":247},{},[],"Useful but malicious apps - as we’ve seen recently in browser extensions (especially chrome), mobile apps (especially android, pattern forming here?), PC software, etc. etc. there are a number of criminals who develop legitimately useful (or at least vaguely useful looking) software that is also used to get backdoor access to your data. This is even harder to spot in SaaS applications, because unlike browser extensions or mobile apps, you can’t inspect the code. And because Almost no SaaS apps expose good logs of what is done using these tokens, you can’t inspect what they are doing.",{"data":2040,"content":2041,"nodeType":391},{},[2042],{"data":2043,"content":2044,"nodeType":243},{},[2045],{"data":2046,"marks":2047,"value":2048,"nodeType":247},{},[],"Supply chain - while supply chain attacks are all the rage these days, we’ve yet to see a really clear attack where an attacker has stolen specifically OAuth tokens from one of these 3rd parties and used them against their customers - at least to my knowledge (please tweet my wrongness @jacques_sec). This does not however mean this can’t or won’t happen - and in fact I’d be super surprised if this doesn’t happen in the next few years.",{"data":2050,"content":2051,"nodeType":243},{},[2052],{"data":2053,"marks":2054,"value":2055,"nodeType":247},{},[],"While there are a lot of things you might want to look at when reviewing an OAuth app, you will at least want to know who owns/publishes the app (who have you delegated access too), what permissions or access the 3rd party has to your data, and whether Google has reviewed and verified the app - so let’s use this blog to focus on that starting point.",{"data":2057,"content":2058,"nodeType":691},{},[2059],{"data":2060,"marks":2061,"value":2062,"nodeType":247},{},[],"Getting the basic token details",{"data":2064,"content":2065,"nodeType":243},{},[2066,2070,2078],{"data":2067,"marks":2068,"value":2069,"nodeType":247},{},[],"As a user you can look at ",{"data":2071,"content":2073,"nodeType":304},{"uri":2072},"https://myaccount.google.com/permissions",[2074],{"data":2075,"marks":2076,"value":2077,"nodeType":247},{},[],"your own Workspace tokens",{"data":2079,"marks":2080,"value":2081,"nodeType":247},{},[]," - where you’ll see a box like this for each integrated app:",{"data":2083,"content":2087,"nodeType":378},{"target":2084},{"sys":2085},{"id":2086,"type":383,"linkType":384},"4uswW6ogq8Gqn6ithrAa5d",[],{"data":2089,"content":2090,"nodeType":243},{},[2091],{"data":2092,"marks":2093,"value":2094,"nodeType":247},{},[],"You’ll see things like the authorised domain (diagrams.net in this case), the homepage of the app, and a description of the permissions granted by the scopes (though not the raw scopes themselves). Unfortunately, fairly basic information, like if the app has been verified by google is not available.",{"data":2096,"content":2097,"nodeType":243},{},[2098],{"data":2099,"marks":2100,"value":2101,"nodeType":247},{},[],"This page is also only available to view your own apps. Rather than trying to teach each of your users how to review OAuth apps, you may want to review these on behalf of your users, and let them get on with their jobs leaving your relationship with them intact. Google anticipated this, and actually allows you to get a list of these apps (or rather the tokens that grant them access) through the admin console in a couple of ways.",{"data":2103,"content":2104,"nodeType":243},{},[2105,2108,2116],{"data":2106,"marks":2107,"value":1217,"nodeType":247},{},[],{"data":2109,"content":2111,"nodeType":304},{"uri":2110},"https://admin.google.com/ac/users",[2112],{"data":2113,"marks":2114,"value":2115,"nodeType":247},{},[],"open a user’s profile in the admin console",{"data":2117,"marks":2118,"value":2119,"nodeType":247},{},[]," and click “connected applications” you’ll get something like this:",{"data":2121,"content":2125,"nodeType":378},{"target":2122},{"sys":2123},{"id":2124,"type":383,"linkType":384},"5EyCKXIf9ODUsVakm4bhnn",[],{"data":2127,"content":2128,"nodeType":243},{},[2129],{"data":2130,"marks":2131,"value":2132,"nodeType":247},{},[],"Beyond having to do this one user at a time - this is useful to see the display name for the application and the services which the app has access to. Unfortunately there is no information to show if the app has been verified by Google, and even worse nothing that links it to a specific publisher. At Push we publish quite a few apps ourselves I can tell you that the display name (“Google APIs Explorer” or “Slack” in the above example) is anything the author chooses, and so isn’t reliable at all unless the app has been verified (I’m assuming Google would reject look-alike or spoofed names here), but again you can’t tell here if the app has been verified by google - so on we go!",{"data":2134,"content":2135,"nodeType":243},{},[2136,2140,2148],{"data":2137,"marks":2138,"value":2139,"nodeType":247},{},[],"The admin console also provides ",{"data":2141,"content":2143,"nodeType":304},{"uri":2142},"https://admin.google.com/ac/reporting/audit/token",[2144],{"data":2145,"marks":2146,"value":2147,"nodeType":247},{},[],"security reports on token grants",{"data":2149,"marks":2150,"value":2151,"nodeType":247},{},[]," that look something like this:",{"data":2153,"content":2157,"nodeType":378},{"target":2154},{"sys":2155},{"id":2156,"type":383,"linkType":384},"6BygfA5C7GNzYZVkfP8du",[],{"data":2159,"content":2160,"nodeType":243},{},[2161,2165,2173,2177,2182,2186,2190],{"data":2162,"marks":2163,"value":2164,"nodeType":247},{},[],"Here we can see the raw scopes (you can find more info about the actual scopes in ",{"data":2166,"content":2168,"nodeType":304},{"uri":2167},"https://developers.google.com/identity/protocols/oauth2/scopes",[2169],{"data":2170,"marks":2171,"value":2172,"nodeType":247},{},[],"Google's API docs",{"data":2174,"marks":2175,"value":2176,"nodeType":247},{},[],"), the app name (display name as above) and the all important ",{"data":2178,"marks":2179,"value":2181,"nodeType":247},{},[2180],{"type":255},"client_id",{"data":2183,"marks":2184,"value":2185,"nodeType":247},{},[]," that is, as far as I can tell, the closes we get to uniquely identifying an app under the hood. As a side note, it turns out that the first number sequence of the ",{"data":2187,"marks":2188,"value":2181,"nodeType":247},{},[2189],{"type":255},{"data":2191,"marks":2192,"value":2193,"nodeType":247},{},[]," is actually the project number of the Google Cloud Project which hosts the app (or technically which hosts the OAuth consent screen for the app). Still no verification status, and no way to figure out who published the app. Further down the rabbit hole we go.",{"data":2195,"content":2196,"nodeType":243},{},[2197,2201,2206,2210,2218],{"data":2198,"marks":2199,"value":2200,"nodeType":247},{},[],"Workspace Admin also has an API, and fortunately there is a ",{"data":2202,"marks":2203,"value":2205,"nodeType":247},{},[2204],{"type":255},"tokens",{"data":2207,"marks":2208,"value":2209,"nodeType":247},{},[]," resource (see Google docs for ",{"data":2211,"content":2213,"nodeType":304},{"uri":2212},"https://developers.google.com/admin-sdk/directory/reference/rest/v1/tokens/list",[2214],{"data":2215,"marks":2216,"value":2217,"nodeType":247},{},[],"Admin Directory API",{"data":2219,"marks":2220,"value":2221,"nodeType":247},{},[],") and there is even an API explorer (which - strange loop warning - also uses OAuth tokens to grant itself access to the API), which give you the following:",{"data":2223,"content":2227,"nodeType":378},{"target":2224},{"sys":2225},{"id":2226,"type":383,"linkType":384},"1zbptRPMoy5F9eexuoqdBh",[],{"data":2229,"content":2230,"nodeType":243},{},[2231,2235,2239],{"data":2232,"marks":2233,"value":2234,"nodeType":247},{},[],"Which actually gives you all the tokens for a user you specify. Not much here that is useful beyond what we got from the token report - we still just have display name, scopes, and the ",{"data":2236,"marks":2237,"value":2181,"nodeType":247},{},[2238],{"type":255},{"data":2240,"marks":2241,"value":2242,"nodeType":247},{},[]," - however, we can now at least automate the process of pulling all apps for all users without having to figure out which are still active after grants and revokes in the audit report.",{"data":2244,"content":2245,"nodeType":243},{},[2246,2250,2254,2258,2266],{"data":2247,"marks":2248,"value":2249,"nodeType":247},{},[],"At this point I was worried whether this would be possible as I couldn’t find any APIs that actually resolved the ",{"data":2251,"marks":2252,"value":2181,"nodeType":247},{},[2253],{"type":255},{"data":2255,"marks":2256,"value":2257,"nodeType":247},{},[]," to something more useful, so I started looking at ways to restrict installing apps instead. This led me to the ",{"data":2259,"content":2261,"nodeType":304},{"uri":2260},"https://admin.google.com/ac/owl/list",[2262],{"data":2263,"marks":2264,"value":2265,"nodeType":247},{},[],"Security > API controls > App access control",{"data":2267,"marks":2268,"value":2269,"nodeType":247},{},[]," panel in the admin console. This panel shows a list of all the trusted apps (which includes all the installed apps), and crucially if you click on the app you get something like the following:",{"data":2271,"content":2275,"nodeType":378},{"target":2272},{"sys":2273},{"id":2274,"type":383,"linkType":384},"3zM9a2NGzAdRVjQ0EN4Ult",[],{"data":2277,"content":2278,"nodeType":243},{},[2279],{"data":2280,"marks":2281,"value":2282,"nodeType":247},{},[],"Huzzah! - finally we have verification status, as well as an email address and links to various policies which can be used to identify the actual publisher of the app (my assumption here is that if the app is verified we can trust this information, but that might be something worth digging into a bit deeper, especially for apps that are not requesting sensitive or restricted scopes, both of which have increasingly thorough vetting).",{"data":2284,"content":2285,"nodeType":243},{},[2286],{"data":2287,"marks":2288,"value":2289,"nodeType":247},{},[],"Unfortunately this is not the end of the story. There are still a couple of problems here, firstly we can’t see which users granted which tokens - only how many users have active tokens. We could correlate this with the information in the user’s profile, but then you could have multiple apps using the same name as below:",{"data":2291,"content":2295,"nodeType":378},{"target":2292},{"sys":2293},{"id":2294,"type":383,"linkType":384},"2fSxeH8UZCC5cZ6vggwck",[],{"data":2297,"content":2298,"nodeType":243},{},[2299,2303,2307,2311,2318],{"data":2300,"marks":2301,"value":2302,"nodeType":247},{},[],"This can be solved by referencing the ",{"data":2304,"marks":2305,"value":2181,"nodeType":247},{},[2306],{"type":255},{"data":2308,"marks":2309,"value":2310,"nodeType":247},{},[]," with the ",{"data":2312,"content":2313,"nodeType":304},{"uri":2212},[2314],{"data":2315,"marks":2316,"value":2317,"nodeType":247},{},[],"admin.directory.tokens.list",{"data":2319,"marks":2320,"value":2321,"nodeType":247},{},[]," API (as discussed above), but that brings us to my final problem - it’s going to be painful cross referencing as the data in the screenshot above is not available in any API I can find, so to automate this I guess we’re going screen scraping 🤦. If you know a better way - please tweet me (again @jacques_sec).",{"data":2323,"content":2324,"nodeType":691},{},[2325],{"data":2326,"marks":2327,"value":2328,"nodeType":247},{},[],"Next up",{"data":2330,"content":2331,"nodeType":243},{},[2332],{"data":2333,"marks":2334,"value":2335,"nodeType":247},{},[],"I’m planning to write future posts on this subject before I forget it all, and these will likely focus on understanding exactly what is possible using specific scopes in a more automated way than paging through endless docs, and more detail on doing in-depth security reviews of OAuth apps. Get in touch if either of these (or something related) would be of interest to you and we might re-prioritise!",{"data":2337,"content":2338,"nodeType":243},{},[2339],{"data":2340,"marks":2341,"value":992,"nodeType":247},{},[],"Investigating user delegated OAuth tokens in Google Workspace - a ride along","Introduction to OAuth tokens in Google Workspace, how they are used, reasons you might want to review them, and a discussion of how you might go about it. ",[2345,2346,2347,2348,2349],"#oauth","#oauth2","#cloud-apps","#google","#workspace","2021-07-15T00:00:00.000+01:00","investigating-user-delegated-oauth-tokens-in-google-workspace-a-ride-along",{"items":2353},[2354,2356],{"sys":2355,"name":1952},{"id":1951},{"sys":2357,"name":1482},{"id":1481},{"items":2359},[2360],{"fullName":232,"firstName":233,"jobTitle":234,"profilePicture":2361},{"url":236},"manage-saas-risks-without-hindering-employees","blog/manage-saas-risks-without-hindering-employees",{"json":2365},{"data":2366,"content":2367,"nodeType":239},{},[2368],{"data":2369,"content":2370,"nodeType":243},{},[2371],{"data":2372,"marks":2373,"value":2374,"nodeType":247},{},[],"In this post, we're focusing on what to do after you've unearthed all the SaaS apps employees are using. SaaS discovery is only part of the process. What happens next is what leads to actual security improvements.","Learn some lightweight ways to manage the risks SaaS introduces without relying on restrictive policies that block employees from using their preferred tools.",{"id":2377,"publishedAt":2378},"3PqX7fLrTIYhWjbEhHSRHG","2024-10-01T12:37:37.860Z",{"items":2380},[2381,2383],{"sys":2382,"name":1478},{"id":1477},{"sys":2384,"name":2386},{"id":2385},"1gZi8NrRy2v9OqPV7C4dwD","Risk management","M7TRTAhdH_m1pcR5s-532ZsXcW9sxe7QiQ0PTRcoHH4",1784196726630]