<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Krishna's Blog]]></title><description><![CDATA[Technical insights of a web geek]]></description><link>https://blog.novogeek.com/</link><image><url>https://blog.novogeek.com/favicon.png</url><title>Krishna&apos;s Blog</title><link>https://blog.novogeek.com/</link></image><generator>Ghost 3.2</generator><lastBuildDate>Thu, 23 Apr 2026 03:07:26 GMT</lastBuildDate><atom:link href="https://blog.novogeek.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[OWASP AppSec Days PNW 2022 -  Common Vulnerabilities in Modern Auth Implementations]]></title><description><![CDATA[Excited to share that I did a talk at the 2nd Annual OWASP AppSec Days Pacific Northwest Conference. This was a virtual event organized by the OWASP foundation on 11 June 2022]]></description><link>https://blog.novogeek.com/owasp-appsec-pnw-2022-krishna/</link><guid isPermaLink="false">630e860820c4d41450ec2999</guid><category><![CDATA[Talks]]></category><category><![CDATA[OWASP]]></category><category><![CDATA[Identity]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Tue, 30 Aug 2022 23:39:03 GMT</pubDate><media:content url="https://blog.novogeek.com/content/images/2022/08/zoom-appsecpnw1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.novogeek.com/content/images/2022/08/zoom-appsecpnw1.png" alt="OWASP AppSec Days PNW 2022 -  Common Vulnerabilities in Modern Auth Implementations"><p>Excited to share that I did a talk at the 2nd Annual <a href="https://www.appsecpnw.org">OWASP AppSec Days Pacific Northwest Conference</a>. This was a <a href="https://www.eventbrite.ca/e/2nd-annual-owasp-appsec-days-pacific-northwest-conference-tickets-296463930597">virtual event</a> organized by the <a href="https://www.owasp.org/">OWASP foundation</a> on 11 June 2022. Glad to be back at presenting at Tech conferences after a break of almost 3 years. My last (public) talk was at <a href="https://blog.novogeek.com/webauthn-owasp-global-appsec-dc-2019/">OWASP Global AppSec DC 2019 on WebAuthn</a>, and I barely presented/blogged about my adventures after that. Probably I should do more of these. Let's see how it goes :)</p><!--kg-card-begin: markdown--><h3 id="titlecommonvulnerabilitiesinmodernauthimplementations">Title: <a href="https://www.appsecpnw.org/speaker/krishna-chaitanya-telikicherla">Common Vulnerabilities in Modern Auth Implementations</a></h3>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="abstract">Abstract</h3>
<p>Enterprises often leverage the modern authentication protocols - OpenId Connect and OAuth - to secure their cloud-based web apps and web APIs. Most enterprises rely on established cloud-based identity providers and their respective authentication libraries to abstract protocol-level complexities and promote secure defaults. However, certain unintentional/less obvious implementation mistakes made by developers result in vulnerabilities that can be exploited with ease.</p>
<p>This session showcases a few common vulnerabilities we’ve found during some of our AppSec pentests across Microsoft. These are all real exploitable, fixed vulnerabilities that have been anonymized. We have also found similar antipatterns exhibited in external blogs and discussion forums. The demos used in this session leverage Azure Active Directory as the identity provider and ASP.NET as the relying party. However, the key takeaways are generic and are applicable to broader tech stacks.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="slides">Slides</h3>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21229937&authkey=ABHj40o1atNSlDg&em=2" width="820" height="463" frameborder="0" scrolling="no"></iframe><!--kg-card-end: html--><!--kg-card-begin: markdown--><h3 id="recording">Recording</h3>
<p>Here is a recording of my full talk. I'm super happy that the talk went smooth and I finished on time (Thanks to my peers at work for bearing with my dry runs and sharing feedback). The best part is, the Demo Gods were with me and all the 5 live demos went exactly as planned :)</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe width="200" height="113" src="https://www.youtube.com/embed/boUKDGigeY0?list=PLfoJYLR9vr_IAd1vYWdKCOO4YYpGFVv99" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><figcaption>Common Vulnerabilities in Modern Auth Implementations by Krishna Chaitanya Telikicherla</figcaption></figure><h3 id="shout-out-to-volunteers-speakers-">Shout out to volunteers &amp; speakers!</h3><p>Needless to say, a lot of effort was put by the volunteers to make the event an astounding success. Huge shout out to the volunteers for all the pre and post conference efforts, and also to my fellow speakers for the absolutely high quality content. Please do watch all the amazing talks of the event at the <a href="https://www.youtube.com/playlist?list=PLfoJYLR9vr_IAd1vYWdKCOO4YYpGFVv99">AppSec PNW Youtube Channel</a>.</p><!--kg-card-begin: markdown--><h3 id="atokenbetterthannft">A token better than NFT!</h3>
<!--kg-card-end: markdown--><p>I was pleasantly surprised to receive a token of appreciation from the planning committee. In the world of NFTs and digital gifts, a physical tumbler (Yeti Rambler) and a handwritten "Thank You" note is worth more than an NFT to me (oh wow, I sound so old school!). Probably it's more than 2 decades ago that I received a handwritten note from someone (my grandfather used to post me handwritten letters when I was a kid). Thanks for the wonderful gesture <a href="https://twitter.com/appsecpnw">@AppSecPnw</a>!</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2022/08/AppSecPNW-ThankYou.jpg" class="kg-image" alt="OWASP AppSec Days PNW 2022 -  Common Vulnerabilities in Modern Auth Implementations"></figure><!--kg-card-begin: markdown--><h3 id="twitterlove">Twitter Love :)</h3>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Thanks for your presentation! I enjoyed the breakdown of areas of weakness and the demos illustrating all of those, including the demo of getting around the client side guest blocking.</p>&mdash; jelliedchemicals (@jelliedchemical) <a href="https://twitter.com/jelliedchemical/status/1535705501974990848?ref_src=twsrc%5Etfw">June 11, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>I am hoping that the concepts and the demos covered in the talk will be of use to the security community - for both pentesters as well as developers. Hopefully, I will be able to share some more useful content in another event. Until next time, have fun exploring the fast-moving tech. Thanks for reading!</p>]]></content:encoded></item><item><title><![CDATA[Restricting access to Azure AD Guest Accounts]]></title><description><![CDATA[This blog post highlights the problem of over-sharing of enterprise content with Azure AD guest accounts. It explains various restrictions that can be put in place to mitigate the problem.]]></description><link>https://blog.novogeek.com/restricting-access-to-azure-ad-guest-accounts/</link><guid isPermaLink="false">5f0dbdd1f503810e803753f3</guid><category><![CDATA[Azure]]></category><category><![CDATA[Identity]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Wed, 15 Jul 2020 08:29:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1594040324471-a447cf2d3054?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1594040324471-a447cf2d3054?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Restricting access to Azure AD Guest Accounts"><p>Azure Active Directory (AAD) has a wonderful Business-to-Business (B2B) collaboration feature which allows an enterprise to share its applications with external users. The users become 'Guests accounts' in AAD and can securely access the enterprise applications. If proper restrictions are not imposed on applications, the guest accounts could access content which is not intended for them. This blog post outlines some of the restrictions that can be put in place to prevent over-sharing of content with guest accounts. Target audience - Primarily developers.</p><h2 id="aad-b2b-invite-and-guest-accounts">AAD B2B Invite and Guest Accounts</h2><p>AAD B2B Invite is a fantastic feature which promotes secure sharing of content without the need for sharing authentication material (e.g., passwords) with external users (guest users). The guest users can login with their existing organizational/personal email credentials and get access to the enterprise content. </p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/0-AAD-Guest-Invite-2.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><h3 id="office-365-external-sharing">Office 365 External Sharing</h3><p>While the AAD B2B Invite is one way of inviting guest users, probably the most popular (but the least obvious) way is to use Office 365 external sharing. In other words, when you share a document in One Drive/Sharepoint Online or other O365 apps to external users, behind the scenes the AAD B2B invitation/authentication process is triggered (there are <a href="https://docs.microsoft.com/en-us/azure/active-directory/b2b/o365-external-user">a few differences</a> in the workflow between direct B2B invite and O365 sharing though). So if you wondered how a large number of guest accounts ended up in your corp AAD tenant, now you know why :) </p><h2 id="the-hidden-problem">The hidden problem</h2><p>Now let's switch the story to a development team which builds an enterprise web application and intends to restrict access only to it's enterprise users (by implementing AAD authentication). What is not obvious immediately to the developers is that the application can also be accessed by guest users in the directory. Let us understand this through a demo.</p><blockquote>For fun, I have registered the domain <a href="https://identt.dev">Identt.dev</a> (pronounce "Identt" as "Identity") and added it as a <a href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/add-custom-domain">custom domain in AAD</a>. So Identt.Dev is my demo enterprise and my users get @identt.dev alias.</blockquote><p>Firstly, let us login to the enterprise application as an enterprise user and check.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/1-employee-login-2.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>Looks good! Next, let us invite a guest user, <em>1337.guest@protonmail.com</em>, to the Identt.dev enterprise. You will see that the "User type" column for the external user shows as "Guest"</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/0.AAD-users-1.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>Now let us try logging in to the application as the guest user.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/2-guest-login-full-access-2.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p><strong>ta-da! </strong>And guests can access apps which are meant to be internal-only (employees only). Let's blame the devs - who would just add authentication and forget about authorization? Well, if you look at the <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-aspnet-core-webapp">docs</a> and <a href="https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC/1-1-MyOrg">code samples</a>, they mainly focus on adding authentication layer to apps. They leave authorization aspects to developers, and very few articles talk about the guest account problem. Developers do take care of business-related authorization checks if required by the application, but they do not expect guest accounts and hence the surprise.</p><h2 id="restricting-access-to-guest-accounts">Restricting access to guest accounts</h2><p>Broadly, the guest accounts problem can be solved in two ways: </p><ul><li>Using AAD groups and user assignment (the config way)</li><li>Using AAD App roles and groups claims (the code way)</li></ul><h3 id="using-aad-groups-and-user-assignment">Using AAD Groups and User Assignment</h3><p>The idea here is to add users to security groups, and add the groups to the AAD app's service principal. The end result is that AAD throws an unauthorized exception if a user who is not in the service principal's group attempts to login. The biggest benefit of this approach is that there are no code changes required in the application. </p><blockquote>When an app is registered in an AAD tenant, an Application Object is created. It has configurable properties such as redirect URIs, API permissions and scopes which are required to make a successful authentication. Every Application Object has at least one Service Principal object (one per tenant) which enables functionalities such as configuring permissions for users in the tenant. Properties of a Service Principal can be modified in Enterprise Applications section of AAD pane. Check <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals">this article</a> for a differences between Application Objects and Service Principals.</blockquote><p>Before looking at some of the caveats of using AAD groups, let us quickly see how this would look like through screenshots from the demo tenant. For the sake of the demo, I have created a nested group called "Employees-only-assigned-group". This group has two users "Kris" and "Jarvis" and a child group "Interns", which has the user "Peter Parker". In the enterprise application, I have added the nested group and in the properties I have set "User assignment enabled" property to "Yes".</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/345-AAD-groups-static-nested.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/6.user-assignment-yes-1.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>So essentially with the above changes, I am ensuring that the guest account "<em>1337.guest@protonmail.com</em>" will not be able to login to the web application. Let us see what happens when the guest user logs in.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/7.guest-login-error-static-group.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>This is perfect! This is exactly what is required to solve the guest accounts problem. However, there is a caveat here. Let us login as the intern and see what happens.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/8.i-spidy-login-error-nested-group2.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>This is unexpected! The intern is unable to login since permissions based on nested group membership is not supported. This is a common mistake which development teams make and they end up blocking access to genuine users.</p><p>In the previous screenshot for enterprise groups, I have not shown what type of group "Employees-only-assigned-group" is (well, the name has the group type). Broadly, AAD (premium) supports 2 membership types - Assigned (Static) groups and Dynamic groups.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/goup-membership-types-2.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>We have seen the drawbacks of Assigned groups earlier. Dynamic groups have a flat hierarchy and their membership is controlled by attributed-based rules. E.g., I have created a dynamic rule which adds members only if "userType" attribute is "member". For a guest account, this attribute's value would be "guest" and hence the rule prevents guest users from being added to this dynamic group. The below screenshots depict this.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/dynamic-groups.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>With this, the employees of the Identt.dev enterprise (including interns) can now login to enterprise applications, while guests are denied access. This is the perfect zero-code solution to the guest accounts problem. </p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/12-intern-login.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>The following points must be kept in mind before choosing AAD groups &amp; user assignment:</p><ul><li>Group membership is supported only in Azure AD Premium P1 and P2</li><li>As discussed earlier, permissions based on nested groups are not supported</li><li>Only global administrators of a tenant can create a dynamic group. </li></ul><p>So while dynamic groups work great, it is not always feasible to use them either due to licensing issues or inconvenience to developers in getting them created. This calls for the next option - App Roles and Group claims</p><h2 id="using-aad-app-roles-and-groups-claims">Using AAD App roles and groups claims</h2><h3 id="aad-app-roles">AAD App Roles</h3><p>The idea of AAD App roles is to declare roles specific to an AAD app (in AAD App's manifest), and assign users/groups to those roles. The owner of the AAD app, a developer in most cases, will always be in control of the roles. These roles show up as claims in a logged-in user's ID token. </p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/app-roles-1.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>The application consuming the ID Token can inspect the "roles" claim, retrieve it's value and make authorization decisions accordingly. <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps">This article</a> and <a href="https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/5-WebApp-AuthZ/5-1-Roles#add-authorization-using-app-roles--roles-claims-to-an-aspnet-core-web-app-thats-signs-in-users-with-the-microsoft-identity-platform">this GitHub sample</a> explain in detail how this can be implemented in ASP.NET Core. The best part of App Roles is that it is not dependent on AAD pricing tiers and it can help refine fine-grained RBAC.</p><h3 id="aad-group-claims">AAD Group Claims</h3><p>The idea of group claims is similar to that of App Roles - Configure AAD apps to emit security groups of the logged-in user into the user's ID token. The relying party application can then make authorization decisions based on the groups. The following screenshots demonstrate how this looks like.</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/07/group-claims.jpg" class="kg-image" alt="Restricting access to Azure AD Guest Accounts"></figure><p>One of the downsides of relying on group claims is that AAD can emit a <a href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-fed-group-claims">maximum of 200 group claims</a>. In large organizations, users being a part of more than 200 groups is common. So if group claims have to be relied upon for authorization decisions, the application has to make explicit graph API calls in it's backend to take care of the above limitation. It should be noted that App Roles and Group claims can co-exist (groups can be assigned roles which are defined in App Roles). </p><h2 id="resources">Resources</h2><p>I have linked various articles throughout this blog post. They point to official docs/code samples which provide detailed guidance. For a quick dose on implementing authorization in AAD-based applications, I would strongly encourage to check out <a href="https://www.youtube.com/watch?v=LRoc-na27l0">this Microsoft Identity Platform community call</a>.</p><h2 id="summary">Summary</h2><p>Guest accounts pose significant security risks if enterprises do not enforce appropriate restrictions. There are several ways to mitigate this problem- using assigned security groups, dynamic security groups (preferred), App Roles (and/or) Group Claims. The traditional way of enforcing authorization checks through an external data store (database) works too. </p><p>Keep looking for uninvited guests who might visit your application! </p><p>Stay safe and stay secure!</p>]]></content:encoded></item><item><title><![CDATA[Welcoming the New Year with 1Password!]]></title><description><![CDATA[This blog post summarizes my personal opinions/experiences in switching to 1Password, a web-based password manager]]></description><link>https://blog.novogeek.com/welcoming-the-new-year-with-1password/</link><guid isPermaLink="false">5e0c3fd0ab352b10c8087301</guid><category><![CDATA[1Password]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Wed, 01 Jan 2020 08:00:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1522251670181-320150ad6dab?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1522251670181-320150ad6dab?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Welcoming the New Year with 1Password!"><p>One of my resolutions for the New Year is to upgrade my personal online security and the top priority is to improve my password management strategy. Being a security professional, I am totally aware of the risks of weak/reused passwords and I am super paranoid about my online security. I have been using <a href="https://keepass.info/">KeePass</a> as my password manager for quite sometime, but now I have moved to <a href="https://1password.com/">1Password</a>. This blog post summarizes my personal opinions/experiences in the process. </p><h2 id="who-needs-a-password-manager-anyways">Who needs a Password Manager anyways?</h2><p>I think this question is best answered by <a href="https://twitter.com/troyhunt">Troy Hunt</a>'s blog post - <em><a href="https://www.troyhunt.com/only-secure-password-is-one-you-cant/">The only secure password is the one you can’t remember</a>. </em>I would strongly suggest you to read the blog post to answer the above question.</p><p>In summary, If: </p><ul><li>You use a unique password per website (say you have accounts in at least 20 different websites) </li><li>Each password is "strong" (say, at least 15 characters long, non guessable, has a combination of upper case, lower case, numbers, special characters)</li></ul><p>Then there is no way you can remember all of them.</p><h3 id="how-about-some-intelligent-password-schemes">How about some <em>intelligent</em> password schemes? </h3><p>You can use some intelligent schemes to create hard-to-guess but probably easy-to-remember passwords e.g., Bruce Schneier has come up with <a href="https://www.schneier.com/blog/archives/2014/03/choosing_secure_1.html">this scheme</a>. I have tried this for some time. This works only if you have, say, half-a-dozen passwords which you care about. This does not scale for sure. In fact, Bruce Schneier himself created a password manager - <a href="https://www.schneier.com/academic/passsafe/">Password Safe</a> - which is awesome by the way. </p><p>So yeah, if you have tens of passwords, you will need a password manager.</p><h2 id="why-did-i-move-away-from-keepass">Why did I move away from KeePass ?</h2><p>I've been using <a href="https://keepass.info/">KeePass</a> since a couple of years ago and it clearly meets its promises, so no complaints. The equation changed due to two main reasons:</p><!--kg-card-begin: markdown--><ul>
<li>
<p><strong>Increased personal devices</strong>: I need my credentials on my personal laptop (Windows), mobile phone (iOS) and occasionally my tablet (android-based). The official KeePass installer is windows-only, but there are several unofficial installers for other platforms. Frankly, I am not comfortable using unofficial versions of a password manager whatsoever (my friend, who will most likely read this blog, uses an unofficial version of KeePass for his iPhone and I keep scaring him for fun :p). They may be secure., but I wouldn't use them. May be the issue is with my paranoia. Also, syncing across devices is still a pain.</p>
</li>
<li>
<p><strong>Sharing accounts with family</strong>: I need to share some of my accounts (say online shopping, streaming etc.) with my spouse. I tried enforcing KeePass, but when clubbed with the above problem my family's convenience took priority over my paranoia and things were sub-optimal. I am pretty sure this is a common problem in every modern household.</p>
</li>
</ul>
<!--kg-card-end: markdown--><p>So time has come to switch to a web-based password manager which solves the above two problems for me.</p><h2 id="which-web-based-password-manager-is-better">Which web-based password manager is better?</h2><p>I have explored some of the popular web-based password managers and they are all very competitive. Most of the popular password managers have many good features in common with 1Password E.g., they have published security design and security audit reports, active bug bounty programs, password security reports and breach notifications, support MFA, cross-platform compatibility, good tech support etc. One of my friends uses <a href="https://www.dashlane.com/">Dashlane</a> and it is pretty impressive. In fact, I was also considering Dashlane as an option,  but went with 1Password due to the following reasons:</p><!--kg-card-begin: markdown--><ul>
<li><em>Shared vault</em>: This allows sharing accounts between family members - members login to 1Password with their respective master passwords. This solves one of the major problems I have today.</li>
<li><em>HaveIBeenPwned (HIBP) integration</em>: I have been following <a href="https://haveibeenpwned.com/">HIBP</a>'s updates since its inception and its <a href="https://1password.com/haveibeenpwned/">integration into 1Password</a> definitely means something for me.</li>
<li><em>Detailed security design</em>: I guess the detailed <a href="https://1password.com/files/1Password-White-Paper.pdf">security design whitepaper of 1Password (pdf)</a> greatly influenced my decision to go with 1Password (yes, I am a little old school - I will be relatively easily sold if someone documents something that makes sense in good detail)</li>
</ul>
<!--kg-card-end: markdown--><p> If not for the above reasons, I would have flipped a coin to decide between Dashlane and 1Password ;) But you will not go wrong if you choose one over the other. </p><h2 id="what-if-1password-gets-compromised">What if 1Password gets compromised?</h2><p>There are a bunch of conditions the attackers must meet to get away with my passwords and that includes compromising 2 things that 1Password does not have (my master secret and secret key). Instead of me writing a long story about it, I would simply refer to <a href="https://1password.com/files/1Password-White-Paper.pdf">1Password's security design whitepaper</a>, which starts exactly with this assumption. </p><p>However, two things can happen (well, this applies to any password manager):</p><ul><li>Design vs implementation gaps: 1Password's implementation may or may not match 100% with what they documented in the design. Being an Application Security Engineer myself, I have seen this in many reputed software services. But given that 1Password has been around for 13 years, the chances of this being prevalent are very low.</li><li>Bugs:  Even if the implementation matches the design, it doesn't mean the software will not have bugs. Every software will have bugs. But given the reputed support structure they have and the critical business they are in, I'm sure patches will be rolled out super quick. </li></ul><p>If you are still paranoid and if you are in IT consulting space, just switch places and think how your customers feel when you sell your cloud offering to them :)</p><h2 id="mfa-and-hardware-security-keys-"><strong>MFA and Hardware security keys!</strong></h2><p>Even if things go absolutely haywire and my 1Password account is somehow gone, I still have MFA to my rescue. I have configured MFA on all the sites that support them, so that gives me additional assurance which is totally under my control. Check out this amazing blog post - <a href="https://techcommunity.microsoft.com/t5/azure-active-directory-identity/your-pa-word-doesn-t-matter/ba-p/731984"><em>Your Pa$$word doesn't matter</em></a><em> </em>by <a href="https://twitter.com/Alex_T_Weinert">Alex Weinert</a> which highlights the importans of MFA.</p><p>To make things stronger, I use my physical hardware security key (<a href="https://www.yubico.com/product/yubikey-5-nfc">Yubico's Yubikey 5 NFC</a>) as my second factor and I have disabled SMS based 2FA altogether. If you are following password security related research you would know why this is super important. Nevertheless, check this scary blog post - <em><a href="https://medium.com/coinmonks/the-most-expensive-lesson-of-my-life-details-of-sim-port-hack-35de11517124">The Most Expensive Lesson Of My Life: Details of SIM port hack</a></em></p><p>As a side note, check the following sites: </p><ul><li><a href="https://twofactorauth.org/">TwoFactorAuth.org</a> - List of websites which support 2FA</li><li><a href="https://www.dongleauth.info/">Dongleauth.info </a> - List of websites which support hardware security keys</li><li><a href="https://www.yubico.com/works-with-yubikey/catalog/">Yubikey catalog </a>- List of websites which work with Yubikey</li></ul><h2 id="immediate-benefits-">Immediate Benefits!</h2><p>Thanks to the <a href="https://watchtower.1password.com/">WatchTower</a> feature of 1Password - This is what I was warned as soon as I migrated my passwords from KeePass to 1Password:</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/01/1p-reuse.jpg" class="kg-image" alt="Welcoming the New Year with 1Password!"></figure><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/01/1p-vuln.png" class="kg-image" alt="Welcoming the New Year with 1Password!"></figure><p>To be fair to KeePass, the problem isn't with its generation. Some of the passwords that I had in KeePass are probably more than an year old. I didn't generate them with KeePass, but created them by myself. I never knew about them as I always pasted them from KeePass and <em>assumed </em>they are strong/unique. Also, I did not enable MFA for 3 accounts  and 1Password alerted me!</p><figure class="kg-card kg-image-card"><img src="https://blog.novogeek.com/content/images/2020/01/1p-2fa.png" class="kg-image" alt="Welcoming the New Year with 1Password!"></figure><p>So I had an immediate win migrating to 1Password and this is totally worth it!</p><h2 id="frustrations-with-resetting-passwords">Frustrations with resetting passwords</h2><p>While I was regenerating a bunch of passwords through 1Password and resetting them, I had a series of frustrations: </p><ul><li>Few websites did not allow passwords greater than a certain length, say 16 characters</li><li>Few websites allowed only certain special characters, so I had to tweak my auto-generated passwords a little to satisfy the websites</li><li>Few websites disable pasting in password/confirm password fields. Imaging the pain involved in typing a 24 character auto-generated password!</li></ul><p>If you are a web developer, make sure you design login forms keeping password managers into consideration.</p><h2 id="why-did-i-write-this-post">Why did I write this post?</h2><p>Well, I am pretty sure someone would go through the same dilemma I was in if they are considering a web-based password manager. So I thought I could spare them some time and peace of mind by sharing my opinions/experiences. </p><p>Happy New Year everyone! Wish you a year of improved online security :) </p><p>Stay Hungry, Stay Foolish, and Stay Secure!!</p>]]></content:encoded></item><item><title><![CDATA[Blog updated - Ghost 3.0 on Azure]]></title><description><![CDATA[My notes on updating from Ghost 2.x to Ghost 3.0 and deploying on Azure]]></description><link>https://blog.novogeek.com/blog-updated-ghost3-on-azure/</link><guid isPermaLink="false">5e0bbc21ab352b10c8087039</guid><category><![CDATA[Ghost]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Wed, 01 Jan 2020 02:40:54 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1504701954957-2010ec3bcec1?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1504701954957-2010ec3bcec1?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Blog updated - Ghost 3.0 on Azure"><p>So it is that time of the year when I take some time to revisit my personal tech stuff. One of the things in my <em>To Do</em> list is to update my blogging platform. The last update was almost an year ago, where I updated my Ghost 0.x blog to 2.x. <a href="https://blog.novogeek.com/blog-upgraded-ghost20-and-lets-encrypt/">That was a painful story</a>. There were no major releases of Ghost till recently and I didn't have time to care about my blog as well. Recently Ghost announced a major update - <a href="https://ghost.org/blog/3-0/">Ghost 3.0</a> - and I was excited about the new features - especially the integrations.</p><h2 id="deploy-to-azure-button-please">"Deploy to Azure" button please?</h2><p>I was searching if someone has already tried out deploying Ghost 3.0 on Azure and has a ready-made "Deploy to Azure" button. The last thing I want to do is manually deploy ghost on my Azure subscription. Given that Ghost 3.0 is only 3 months old, I wasn't too hopeful. Thankfully, I came across a few blogs which tried it already. </p><p>Thanks to my old blog post about Ghost 2.x migration which made the search easier this time (see, <a href="https://blog.novogeek.com/blog-upgraded-ghost20-and-lets-encrypt/#why-did-i-blog-about-this">I told you a year ago</a> that this would be handy! Always document your efforts!). Following the cues from my old blog, I checked the <a href="https://www.gatevnotes.com/introducing-ghost-2-on-azure-web-app-service/">Radoslav Gatev</a>'s blog to see if he updated it to Ghost 3.x. Unfortunately he didn't, but then I came across <a href="https://github.com/YannickRe/Ghost-Azure">Yannick Reekmans</a>' repo which he apparently cloned from Radoslav and updated it. It has "Deploy to Azure" button. I <a href="https://github.com/novogeek/Ghost-Azure">forked</a> Yannick's repo and <strong>it works</strong>!</p><h3 id="the-pain-of-redeploying-a-web-app-">The pain of redeploying a web app!</h3><p>My last deployment didn't rely on CI/CD (so does the current deployment) as I was not sure if the Radoslav's repo will receive newer updates . So what happens when you don't have a CI/CD pipeline setup and you have to redeploy a web app using "Deploy to Azure" button? Well, you will end up deleting the web app (after taking a backup of course), create a new web app, do a fresh deployment, map custom domain in DNS settings, reconfigure TLS cert &amp; binding. Phew! Mapping a custom domain doesn't take much time, but I was worried about re-configuring TLS as my last year's deployment wasn't that hassle-free. </p><h3 id="informing-ghost-about-your-custom-domain">Informing Ghost about your custom domain</h3><p>While the deployment to Azure and <a href="https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-custom-domain">configuring custom domain</a> was smooth, the site's URL at various locations was still pointing to my Azure App Service domain (novogeek.azurewebsites.net) instead of my custom domain (blog.novogeek.com). Since Ghost was deployed on a new Azure app service (even before mapping a custom domain), it does not know anything about the custom domain. You can verify this by clicking on the blog's logo in the top navigation and it would point to the Azure App Service and not the custom domain. You can also verify the same under Ghost Admin section (Settings -&gt; General -&gt; Site Meta Settings -&gt; Search Engine Result Preview). Turns out that to inform Ghost about your custom domain, you need to do the following: Navigate to Azure App Service -&gt; Configuration -&gt; Application Settings and set a new application setting called <strong>url </strong>pointing to your custom domain. Restart the website and Ghost automatically honors the custom domain everywhere!</p><h2 id="app-service-managed-certificates-">App Service Managed Certificates!</h2><p>Azure App Service recently launched <a href="https://azure.microsoft.com/en-us/updates/secure-your-custom-domains-at-no-cost-with-app-service-managed-certificates-preview/">App Service Managed Certificates</a> (in preview). It lets you secure custom domains on your Windows and Linux apps at no additional charge (it is available only on Basic and above app service plans). In just 3-4 clicks you can get a new standard certificate (not wild card one). The certificate is valid for 6 months but the best part is, it will be automatically renewed by Azure App Service about a month before expiry. So if you are procrastinating about enabling TLS coz it is a time consuming thing, think no more!</p><h2 id="ghost-integrations-disqus-formspree">Ghost Integrations - Disqus, Formspree</h2><p>The thing I missed the most after switching to Ghost is comments system. Ghost does not come with an integrated comments system  and it wasn't easy to integrate one. Ghost 3.0 comes with <a href="https://ghost.org/integrations/">a bunch of integrations</a> - some are available by default while some can be configured with minimal code changes to the template files. I have configured <a href="https://ghost.org/integrations/disqus/">Disqus</a> for comments (you can see this at the bottom of every blog post) and <a href="https://ghost.org/integrations/formspree/">Formspree</a> for contact form (you can see this on the <a href="https://blog.novogeek.com/contact/">Contact</a> link in the top navigation bar). I have an Office 365 subscription which I used to setup a dedicated email account for my blog and used it for Formspree contact form. So yeah, now more power with my Ghost blog! </p><h2 id="future-updates">Future updates</h2><p>Lack of CI/CD slows the deployment of future updates of Ghost platform. However, given the stability of the current version and the ease of new manual deployments, I think it is more of a trade-off between effort spent on setting up CI/CD vs manual updates. I don't have immediate CI/CD plans, but <a href="https://devblogs.microsoft.com/premier-developer/creating-a-ghost-blog-on-an-azure-app-service/">Chris Tjoumas' blog</a> may serve as a handy reference if someone wants to setup.</p><h2 id="why-did-i-blog-about-this"><strong>Why did I blog about this?</strong></h2><p>Citing the section from my <a href="https://blog.novogeek.com/blog-upgraded-ghost20-and-lets-encrypt/#why-did-i-blog-about-this">last year's blog post</a> :)</p><blockquote>Firstly, the references in this post will serve as a quick start when I plan for future upgrades. More importantly, like all the good blog posts that helped me setup this blog, this post might help someone who is facing similar challenges in upgrading Ghost on Azure. Always good to give it back to the community!</blockquote>]]></content:encoded></item><item><title><![CDATA[OWASP Global AppSec DC 2019 Talk on  WebAuthn]]></title><description><![CDATA[Excited to share that my colleague Murali and I gave a talk at the "OWASP Global AppSec DC 2019" security conference. The event was held at Washington, D.C. between 9th-13th September.]]></description><link>https://blog.novogeek.com/webauthn-owasp-global-appsec-dc-2019/</link><guid isPermaLink="false">5e0a722c70438418649f5d36</guid><category><![CDATA[Talks]]></category><category><![CDATA[OWASP]]></category><category><![CDATA[Identity]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sun, 15 Sep 2019 05:11:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1458891216473-4f26bb4eb40e?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1458891216473-4f26bb4eb40e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="OWASP Global AppSec DC 2019 Talk on  WebAuthn"><p>Excited to share that my colleague <a href="https://twitter.com/0xmurali">Murali</a> and I gave a talk at the "<a href="https://dc.globalappsec.org">OWASP Global AppSec DC 2019</a>" security conference. The event was organized by the <a href="https://www.owasp.org">OWASP foundation</a> and was held at Washington, D.C. between 9th-13th September.</p><h3 id="talk-title">Talk Title</h3><p><a href="https://globalappsecdc2019.sched.com/event/Ur5e/building-secure-password-less-web-applications-using-webauthn?iframe=no&amp;w=100%&amp;sidebar=yes&amp;bg=no"><em>Building Secure Password-less Web Applications using WebAuthn</em></a></p><h3 id="abstract">Abstract </h3><p>According to the 2017 Verizon Data Breach Investigation Report, 81% of breaches were caused by weak, stolen or reused passwords. But what if you NEVER had to deal with passwords in the first place? For the past several years, security experts across the industry have been working on a robust authentication protocol that does not involve passwords. The result is a specification called WebAuthn, which is now an official W3C web standard. With WebAuthn, developers can build secure web applications that enable users to experience password-less logins. In this session, we will explain how WebAuthn works and show how developers can leverage it.</p><h3 id="slides">Slides</h3><p>Below are the slides of the talk</p><!--kg-card-begin: html--><iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21228075&authkey=AOaFqV2i3EpuIXI&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe><!--kg-card-end: html--><h3 id="demos">Demos</h3><p>Below are 2 videos which capture 4 demos. We demonstrated these live during the talk</p><!--kg-card-begin: markdown--><ul>
<li><strong>Video 1</strong>: A custom ASP.NET core web app which leverages WebAuthn for registration &amp; login. The web app uses FIDO2 .NET WebAuthn Library built by <a href="https://twitter.com/andersaberg">Anders Åberg</a> and several community contributors. There are 3 demos in this video:
<ul>
<li>Demo 1: Registration &amp; Login</li>
<li>Demo 2: User Verification</li>
<li>Demo 3: Defense against Phishing</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><iframe width="459" height="344" src="https://www.youtube.com/embed/jilKhi67qG0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><!--kg-card-begin: markdown--><ul>
<li><strong>Video 2</strong>: A custom ASP.NET core web app which integrates with Azure Active Directory (AAD). In this case AAD handles WebAuthn implementation details while the web app just federates with AAD for for authentication</li>
</ul>
<!--kg-card-end: markdown--><figure class="kg-card kg-embed-card"><iframe width="459" height="344" src="https://www.youtube.com/embed/CKpSd1MPZ3Q?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><h3 id="demos-source-code">Demos source code </h3><p>The entire source code of the demos is available on GitHub. Check <a href="https://github.com/novogeek/WebAuthnDemo">this repo</a>.</p><h3 id="tweets">Tweets</h3><p>A few favorite tweets around the talk :) </p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Nice coincidence! Ordered <a href="https://twitter.com/Yubico?ref_src=twsrc%5Etfw">@Yubico</a>&#39;s yubikeys a coupe of days back and now <a href="https://twitter.com/azuread?ref_src=twsrc%5Etfw">@azuread</a> announces <a href="https://twitter.com/hashtag/FIDO2?src=hash&amp;ref_src=twsrc%5Etfw">#FIDO2</a> support. <a href="https://twitter.com/hashtag/WebAuthn?src=hash&amp;ref_src=twsrc%5Etfw">#WebAuthn</a> FTW! <a href="https://t.co/2CWYubB6Ej">https://t.co/2CWYubB6Ej</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1149362977885212672?ref_src=twsrc%5Etfw">July 11, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/andersaberg?ref_src=twsrc%5Etfw">@andersaberg</a> I was playing around with the FIDO2 .Net library since the last few days. Nicely done! It would definitely benefit the community at large. Look forward to see more enhancements..  <a href="https://t.co/sL0uv1HEOw">https://t.co/sL0uv1HEOw</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1171800964841406465?ref_src=twsrc%5Etfw">September 11, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Excited to present at <a href="https://twitter.com/owasp?ref_src=twsrc%5Etfw">@owasp</a> <a href="https://twitter.com/hashtag/GlobalAppSec?src=hash&amp;ref_src=twsrc%5Etfw">#GlobalAppSec</a> today on <a href="https://twitter.com/hashtag/WebAuthn?src=hash&amp;ref_src=twsrc%5Etfw">#WebAuthn</a>, along with <a href="https://twitter.com/0xmurali?ref_src=twsrc%5Etfw">@0xmurali</a>. We have some cool demos too. The session is at 3.30 PM. Check out &quot;Building Secure Password-less Web Applications using WebAuthn&quot;  <a href="https://t.co/8kQv2g8AzQ">https://t.co/8kQv2g8AzQ</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1172146332972310529?ref_src=twsrc%5Etfw">September 12, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Great talk by <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> and <a href="https://twitter.com/0xmurali?ref_src=twsrc%5Etfw">@0xmurali</a>! <a href="https://twitter.com/hashtag/GlobalAppsec?src=hash&amp;ref_src=twsrc%5Etfw">#GlobalAppsec</a> <a href="https://twitter.com/owasp?ref_src=twsrc%5Etfw">@owasp</a> <a href="https://t.co/RtQmrwy2a0">pic.twitter.com/RtQmrwy2a0</a></p>&mdash; Rafael Dreher (@dreher) <a href="https://twitter.com/dreher/status/1172242547135188994?ref_src=twsrc%5Etfw">September 12, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Is it possible to create a <a href="https://twitter.com/hashtag/WebApp?src=hash&amp;ref_src=twsrc%5Etfw">#WebApp</a> that’s secure but doesn’t require a password? Yes! Krishna Chaitanya Telikicherla <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> and Murali Vadakke Puthanveetil <a href="https://twitter.com/0xmurali?ref_src=twsrc%5Etfw">@0xMurali</a> demo their project during <a href="https://twitter.com/owasp?ref_src=twsrc%5Etfw">@owasp</a> <a href="https://twitter.com/GlobalAppSecDC?ref_src=twsrc%5Etfw">@GlobalAppSecDC</a> 2019 <a href="https://t.co/yOGY5dKh9O">pic.twitter.com/yOGY5dKh9O</a></p>&mdash; Edmond Momartin (@emomartin) <a href="https://twitter.com/emomartin/status/1172243530187792390?ref_src=twsrc%5Etfw">September 12, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Excellent presentation Krishna and Murali !!!</p>&mdash; Shyam Rayaprolu (@shyam_rayaprolu) <a href="https://twitter.com/shyam_rayaprolu/status/1172253387599024134?ref_src=twsrc%5Etfw">September 12, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure>]]></content:encoded></item><item><title><![CDATA[Blog updated- Ghost 2.0 and Lets Encrypt!]]></title><description><![CDATA[<p>Two years back I have blogged about <a href="https://blog.novogeek.com/welcome-to-my-new-blog/">migrating from BlogEngine to Ghost</a>. In short, I have <a href="https://archive.novogeek.com"><strong>archived</strong></a> my old blog and started this blog afresh. I have used <a href="https://github.com/felixrieseberg/Ghost-Azure">this Ghost-Azure</a> repository as my source to do a one-click deploy to Azure. I had my ghost blog up and running and</p>]]></description><link>https://blog.novogeek.com/blog-upgraded-ghost20-and-lets-encrypt/</link><guid isPermaLink="false">5e0a722c70438418649f5d35</guid><category><![CDATA[Ghost]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sun, 25 Nov 2018 13:08:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1496483648148-47c686dc86a8?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=35c61b00d8c908829fec53f41a3d9802" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1496483648148-47c686dc86a8?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=35c61b00d8c908829fec53f41a3d9802" alt="Blog updated- Ghost 2.0 and Lets Encrypt!"><p>Two years back I have blogged about <a href="https://blog.novogeek.com/welcome-to-my-new-blog/">migrating from BlogEngine to Ghost</a>. In short, I have <a href="https://archive.novogeek.com"><strong>archived</strong></a> my old blog and started this blog afresh. I have used <a href="https://github.com/felixrieseberg/Ghost-Azure">this Ghost-Azure</a> repository as my source to do a one-click deploy to Azure. I had my ghost blog up and running and it appeared that all my blogging platform issues have been sorted out. </p><p>Two years passed by, I was blogging intermittently about <strong><a href="https://blog.novogeek.com/tag/talks/">my talks</a> </strong>and I barely focused on updating my blog. Since I have setup a sync between my Azure website and my source repo using Azure app service deployment center, I was assuming that my blogging platform will be updated with the latest ghost releases. I was correct technically, except that the source Ghost-Azure repo stopped receiving updates and my ghost version was stuck at 0.11.11. Nevertheless, I thought it is just a  matter of upgrading to the latest version, exporting older posts and importing them back to the latest deployment.</p><h2 id="a-painful-migration-from-ghost-0-x-to-2-0">A painful migration from Ghost 0.x to 2.0</h2><p>I thought of attempting a manual deployment of Ghost on Azure to avoid future upgrade problems, but my hectic work schedule didn't encourage me much. I did a quick search to find out what the community is doing and I came across <a href="https://github.com/solvsoftware/Ghost-Azure">Radoslav Gatev's Ghost-Azure repository</a> with a true one-click deployment of Ghost 2.0 on Azure. If you are starting a new blog and want to deploy on Azure, you should perhaps start here.</p><p>My excitement of finding a new and latest one-click deployment was short-lived though, as I quickly found that I was unable to import my blog posts from Ghost 0.11.11 to Ghost 2.0. As per Ghost's <a href="https://docs.ghost.org/faq/upgrade-to-ghost-2-0/">official documentation</a> and discussions in forums, I should:</p><ol><li>Upgrade Ghost from 0.x to 1.0</li><li>Import the 0.x posts to Ghost 1.0 and export them from 1.0</li><li>Upgrade Ghost from 1.0 to 2.0 </li><li>Import the 1.0 posts to Ghost 2.0. </li></ol><p>Phew! While I can understand that breaking changes are common across versions, it would have definitely been a great help had Ghost team released a 0.x to 2.0 content migration utility. Given the <a href="https://blog.ghost.org/2-0/">exciting features</a> in Ghost 2.0, it seemed that it is totally worth taking the pain in migrating to Ghost 2.0 instead of switching to another blogging platform.</p><p>So to start my migration process, I  have deployed Ghost 1.0 following Corey Smith's <a href="https://www.coreysmith.co/set-up-ghost-blog-on-azure/">blog post</a>, except that I have used <a href="https://github.com/solvsoftware/Ghost-Azure/tree/1.16.0">Radoslav Gatev's repo</a> as my Ghost source. I have cloned the source from the tag 1.16.0, used it as a local git repository and pushed it to Azure. I had to use Kudu console to trigger <em>npm install </em>and <em>node db.js </em>to get dependencies and database setup right. Once I have deployed Ghost 1.x, I have imported my posts from Ghost 0.x and it was smooth. Now I exported the posts from 1.x and saved locally. To install Ghost 2.0 on Azure, I used the latest code from Gatev's repo (branch Azure, tag 2.1.0) and the one-click deployment was super smooth. I then imported all my posts that I saved previously from 1.x and all my posts are back in Ghost 2.0! </p><h2 id="lets-encrypt-">Lets Encrypt!</h2><p>Let me be honest, every time I shared my blog post on Twitter, I always had a feeling of guilt as the blog is served on plain HTTP. Moving to HTTPS using LetsEncrypt was always in my TODO list but I kept procrastinating. </p><blockquote>To all those wondering why a static site requires HTTPS, read "<em><a href="https://www.troyhunt.com/heres-why-your-static-website-needs-https/">Here's Why Your Static Website Needs HTTPS</a>" </em>by <a href="https://twitter.com/troyhunt">Troy Hunt</a>.</blockquote><p>My site's homepage (<a href="https://novogeek.com">novogeek.com</a>) was on http and very recently it automatically got HTTPS love without my effort! It is hosted on Github pages as a sub domain, and recently <a href="https://blog.github.com/2018-05-01-github-pages-custom-domains-https/">Github subdomains</a> gained HTTPS support. However, this blog's sub domain (<a href="https://blog.novogeek.com">blog.novogeek.com</a>) does not inherit the HTTPS love and I have to explicitly configure HTTPS on this subdomain. Given that this blog is hosted on Azure, first I had to migrate from Shared plan to Basic plan (Shared plan only supports custom domains but does not support enabling TLS for custom domains). </p><p>To configure Lets Encrypt on Azure App Service, the process is really, really simple. To all the Azure App Service consumers out there procrastinating to move to HTTPS, delay no further and just install <a href="https://github.com/sjkp/letsencrypt-siteextension">Lets Encrypt Site Extension</a>. There are several blog posts detailing all the steps. I followed <a href="https://codehollow.com/2017/10/lets-encrypt-azure-webapps/">CodeHollow's blog post</a> and I had HTTPS configured in less than 20 minutes! Finally, no more guilt!</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Ok. Now I can share my blog posts without guilt. Thanks to <a href="https://twitter.com/github?ref_src=twsrc%5Etfw">@GitHub</a> pages for the free https on my home page <a href="https://t.co/SrRPcxOLPT">https://t.co/SrRPcxOLPT</a>.  Now I&#39;ve enforced https on my blog  <a href="https://t.co/JhW0PasvDv">https://t.co/JhW0PasvDv</a> using <a href="https://twitter.com/letsencrypt?ref_src=twsrc%5Etfw">@letsencrypt</a> cert. I had excuses, but better late than never.</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1059810497745313792?ref_src=twsrc%5Etfw">November 6, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><h2 id="future-upgrades">Future upgrades</h2><p>Well, this will be a continuous process, but hopefully less painful in the future. I liked the upgrading plan outlined by <a href="https://oncodedesign.com/migrate-to-ghost-1-x-on-azure/#deployfromgithubtoazureappservice">OnCodeDesign</a>. I have forked <a href="https://github.com/solvsoftware/Ghost-Azure">Gatev's Ghost-Azure repo</a> on Github and deployed this blog from <a href="https://github.com/novogeek/Ghost-Azure">my forked repo</a>. The plan for now is to sync the fork periodically and keep updating this blog. This will work as long as Gatev's repo gets the latest updates (I trust the community!). If this doesn't work in the long term, may be I will deploy Ghost on my Azure App service manually, as outlined in "<em><a href="https://medium.com/@andrewzey/hosting-ghost-on-azure-the-definitive-guide-1d446d59b02a">Hosting Ghost on Azure — The Definitive Guide</a></em>".</p><h2 id="why-did-i-blog-about-this">Why did I blog about this?</h2><p>Firstly, the references in this post will serve as a quick start when I plan for future upgrades. More importantly, like all the good blog posts that helped me setup this blog, this post might help someone who is facing similar challenges in upgrading Ghost on Azure. Always good to give it back to the community! </p>]]></content:encoded></item><item><title><![CDATA[Perils of Bad API impersonation design]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><a href="https://null.co.in/chapters/6-hyderabad">NULL Hyderabad</a> held its <a href="https://nullhydoct2018.eventbrite.com">October month's security meetup</a> at Service Now, Hyderabad. I have presented on the topic &quot;<em>Gaining lateral movement in cloud solutions by leveraging bad API impersonation designs</em>&quot;.</p>
<p>I could have titled the talk as &quot;What might have possibly gone wrong in Facebook's <em>View As</em></p>]]></description><link>https://blog.novogeek.com/perils-of-bad-api-impersonation-design/</link><guid isPermaLink="false">5e0a722c70438418649f5d2f</guid><category><![CDATA[Talks]]></category><category><![CDATA[Null Hyd]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 27 Oct 2018 14:19:05 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1514544177634-286748f95f31?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=b1de3f0d4512450e66d9f45118fa0543" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1514544177634-286748f95f31?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=b1de3f0d4512450e66d9f45118fa0543" alt="Perils of Bad API impersonation design"><p><a href="https://null.co.in/chapters/6-hyderabad">NULL Hyderabad</a> held its <a href="https://nullhydoct2018.eventbrite.com">October month's security meetup</a> at Service Now, Hyderabad. I have presented on the topic &quot;<em>Gaining lateral movement in cloud solutions by leveraging bad API impersonation designs</em>&quot;.</p>
<p>I could have titled the talk as &quot;What might have possibly gone wrong in Facebook's <em>View As</em> feature that affected 50 million accounts&quot;, but I didn't want to point fingers at the Facebook issue. Instead, I wanted to generalize it so that the learning can be used in a wider sense.</p>
<h6 id="abstract">Abstract:</h6>
<p>Software systems which require a user impersonating another user's identity often involve security challenges. It becomes all the more challenging when the system is a modern web platform comprising of web apps and APIs talking to each other by leveraging identity federation. While protocols such as OpenId Connect and OAuth 2.0 provide a way of securely authenticating and authorizing users &amp; applications, they do not specify how impersonation can be implemented, so development teams are on their own. If not designed and implemented meticulously, the impersonation feature could lead to horizontal or vertical privilege escalations. Even worse, it could potentially lead to lateral movement, where an adversary can catch hold of one account and harvest details of several other accounts of the system. The recent <a href="https://newsroom.fb.com/news/2018/09/security-update/">Facebook vulnerability in &quot;View As&quot; feature</a>, which affected 50 million users, is arguably an example of this. In this demo-driven talk, we will look at the perils of bad impersonation implementation and see how it can be designed &amp; implemented securely in an API-driven system.</p>
<h6 id="slides">Slides:</h6>
<p>Below are the slides of the talk.</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21226924&authkey=AMDJcNVns2AT18A&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe>
<h6 id="demosourcecode">Demo Source Code:</h6>
<p>The entire source code of the demo is available on GitHub. Check <a href="https://github.com/novogeek/DarkNet">this repo</a>. The demo is built using <a href="https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1">ASP.NET Core 2.1</a>.</p>
<h6 id="demovideo">Demo Video:</h6>
<p>Here is a quick screen recording of the demo:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/PD8M9v061p8" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
<h5 id="selectedtweets">Selected Tweets:</h5>
<h6 id="myrantwhichdrovemetodothistalk">My rant which drove me to do this talk</h6>
<p>The twitter thread has more details..</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Confirms the theory I long believed in.. a vast majority of developers and pentesters do not understand modern Identity protocols &amp; design. May be they still think that Federation, Impersonation, Delegation are for Infra folks, who themselves dont fully understand modern identity</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1050624806884802561?ref_src=twsrc%5Etfw">October 12, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h6 id="bugordesignflaw">Bug or design flaw?</h6>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">I don’t think we have full details yet, but from what i think is know so far it’s a (design) flaw, not a bug - a side-effect of an intended feature, not a feature working incorrectly.</p>&mdash; Mike Andrews (@ma) <a href="https://twitter.com/ma/status/1045755128534323200?ref_src=twsrc%5Etfw">September 28, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h6 id="codedemosaweekinadvancecheck">Code demos a week in advance..check</h6>
<p>Now this is why I do talks. I get to set a deadline and code.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">And the demo for my talk &quot;Gaining lateral movement in cloud solutions by leveraging bad API impersonation designs&quot; is ready! Stretched a lot and learnt a lot in the last 1 week while doing the demo. This is why I love to present at <a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a> <a href="https://twitter.com/null0x00?ref_src=twsrc%5Etfw">@null0x00</a> <a href="https://twitter.com/hashtag/nullhyd?src=hash&amp;ref_src=twsrc%5Etfw">#nullhyd</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1054717848294252544?ref_src=twsrc%5Etfw">October 23, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h6 id="lastminuteslidespreparationcheck">Last minute slides preparation..check</h6>
<p>For some reason, this is the norm and I cannot fix this :)</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">My <a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a>  talk is about to start in an hour and as usual I am preparing my slides sitting in the last row. <a href="https://twitter.com/0xmahesh?ref_src=twsrc%5Etfw">@0xmahesh</a> is like.. can you do the intro talk.. I am like.. my slides are.. hmm.. sure.. <a href="https://t.co/TL8wDLNOCG">https://t.co/TL8wDLNOCG</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/1056050803348168704?ref_src=twsrc%5Etfw">October 27, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h6 id="hereshowigotthetitleofthetalk">Here's how I got the title of the talk</h6>
<p>Thanks to TalBe'erySec :)</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Thanks! Please feel free to use it. Would love to see your slides if you publish them</p>&mdash; Tal Be&#39;ery (@TalBeerySec) <a href="https://twitter.com/TalBeerySec/status/1053289032137011205?ref_src=twsrc%5Etfw">October 19, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h6 id="theaudience">The audience</h6>
<p>Glad that around 60+ folks turned up. The hall is too big to fit in one pic.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">How bad <a href="https://twitter.com/hashtag/api?src=hash&amp;ref_src=twsrc%5Etfw">#api</a> design can lead to breach data by ⁦<a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a>⁩ . <a href="https://twitter.com/hashtag/security?src=hash&amp;ref_src=twsrc%5Etfw">#security</a> <a href="https://twitter.com/hashtag/learning?src=hash&amp;ref_src=twsrc%5Etfw">#learning</a> in <a href="https://twitter.com/hashtag/weekend?src=hash&amp;ref_src=twsrc%5Etfw">#weekend</a> ⁦<a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a>⁩ <a href="https://twitter.com/hashtag/nullhyd?src=hash&amp;ref_src=twsrc%5Etfw">#nullhyd</a> ⁦<a href="https://twitter.com/doy143in?ref_src=twsrc%5Etfw">@doy143in</a>⁩ ⁦<a href="https://twitter.com/hashtag/cloudsecurity?src=hash&amp;ref_src=twsrc%5Etfw">#cloudsecurity</a> ⁦<a href="https://twitter.com/secfigo?ref_src=twsrc%5Etfw">@secfigo</a>⁩ ⁦<a href="https://twitter.com/vhssunny1?ref_src=twsrc%5Etfw">@vhssunny1</a>⁩ ⁦<a href="https://twitter.com/pavanw3b?ref_src=twsrc%5Etfw">@pavanw3b</a>⁩ ⁦<a href="https://twitter.com/0xmahesh?ref_src=twsrc%5Etfw">@0xmahesh</a>⁩ <a href="https://t.co/YJtxuAeZRY">pic.twitter.com/YJtxuAeZRY</a></p>&mdash; Sanjeev Jaiswal (@jassics) <a href="https://twitter.com/jassics/status/1056069231903694849?ref_src=twsrc%5Etfw">October 27, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h6 id="disclaimer">Disclaimer:</h6>
<p>The demo that I built does not necessarily depict the exact technical details behind Facebook's &quot;View As&quot; vulnerability. I am not particularly sure what exactly is Facebook's &quot;View As&quot; impersonation design/implementation. I haven't come across any documentation. So I made up a few things just to show the impact of bad impersonation design and drive a point - E.g., I built my toy IDP just for fun and it is not a standard implementation of OIDC/OAuth 2.0. Finally, this talk and demo has nothing to do with my employer - it is just a fun exploration by a passionate security enthusiast :)</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Azure Data Encryption Techniques]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Microsoft User Group Hyderabad (<a href="http://mugh.net">MUGH</a>) is back with yet another full-day event on cutting edge Microsoft Technologies! <a href="https://themugh.github.io/gabc2018/">Global Azure Boot Camp 2018</a> was held on 21st April 2018 and it has covered several latest technical topics.<br>
Here is our gang!</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Gang of passionate people met together to host Global Azure</p></blockquote>]]></description><link>https://blog.novogeek.com/azure-data-encryption-techniques-gabc-2018/</link><guid isPermaLink="false">5e0a722c70438418649f5d2e</guid><category><![CDATA[Talks]]></category><category><![CDATA[Security]]></category><category><![CDATA[MUGH]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 21 Apr 2018 03:25:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=59773981c4a4762fe474590959ddf064" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=59773981c4a4762fe474590959ddf064" alt="Azure Data Encryption Techniques"><p>Microsoft User Group Hyderabad (<a href="http://mugh.net">MUGH</a>) is back with yet another full-day event on cutting edge Microsoft Technologies! <a href="https://themugh.github.io/gabc2018/">Global Azure Boot Camp 2018</a> was held on 21st April 2018 and it has covered several latest technical topics.<br>
Here is our gang!</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Gang of passionate people met together to host Global Azure Bootcamp 2018 in Hyderabad. Excited to see how we are evolving with industry trends <a href="https://twitter.com/hashtag/AI?src=hash&amp;ref_src=twsrc%5Etfw">#AI</a> <a href="https://twitter.com/hashtag/Bot?src=hash&amp;ref_src=twsrc%5Etfw">#Bot</a> <a href="https://twitter.com/hashtag/DevOps?src=hash&amp;ref_src=twsrc%5Etfw">#DevOps</a> <a href="https://twitter.com/hashtag/OSS?src=hash&amp;ref_src=twsrc%5Etfw">#OSS</a> <a href="https://twitter.com/hashtag/gabc2018?src=hash&amp;ref_src=twsrc%5Etfw">#gabc2018</a> <a href="https://twitter.com/hashtag/mugh?src=hash&amp;ref_src=twsrc%5Etfw">#mugh</a> <a href="https://twitter.com/AbhijitJana?ref_src=twsrc%5Etfw">@AbhijitJana</a> <a href="https://twitter.com/techieshravan?ref_src=twsrc%5Etfw">@techieshravan</a> <a href="https://twitter.com/a_pranav?ref_src=twsrc%5Etfw">@a_pranav</a> <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> <a href="https://t.co/ScnumMLs6s">https://t.co/ScnumMLs6s</a></p>&mdash; Subhendu De (@dotnetartisan) <a href="https://twitter.com/dotnetartisan/status/988050248718278656?ref_src=twsrc%5Etfw">April 22, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>I have presented on <strong>Azure Data Encryption Techniques</strong>.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="fr" dir="ltr"><a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> on Azure Encryption Techniques <a href="https://twitter.com/hashtag/GlobaAzure?src=hash&amp;ref_src=twsrc%5Etfw">#GlobaAzure</a> <a href="https://twitter.com/hashtag/Hyderabad?src=hash&amp;ref_src=twsrc%5Etfw">#Hyderabad</a> <a href="https://twitter.com/hashtag/gabc2018?src=hash&amp;ref_src=twsrc%5Etfw">#gabc2018</a> <a href="https://t.co/VFxMo2S9xh">pic.twitter.com/VFxMo2S9xh</a></p>&mdash; Pranav Ainavolu (@a_pranav) <a href="https://twitter.com/a_pranav/status/987629841460678656?ref_src=twsrc%5Etfw">April 21, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Below are the slides.</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21226922&authkey=AOwLktuHEi5eGEY&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Learning a few Crypto pitfalls practically-Part 2]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>NULL Hyderabad held its <a href="https://www.eventbrite.com/e/nu-hyderabad-meet-september-2017-tickets-37941805963#">September month's security meetup</a> at CA Technologies, Hyderabad. I had the opportunity to present in this meet and I chose to continue with <a href="http://blog.novogeek.com/2017/04/22/learning-a-few-crypto-pitfalls-practically-null-hyd/">April month's topic</a> - practical crypto pitfalls.</p>
<p>As always, for me presentation means demos first and slides last. This time I have spent</p>]]></description><link>https://blog.novogeek.com/learning-a-few-crypto-pitfalls-practically-part2-null-hyd/</link><guid isPermaLink="false">5e0a722c70438418649f5d2d</guid><category><![CDATA[Talks]]></category><category><![CDATA[Security]]></category><category><![CDATA[Null Hyd]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sun, 15 Oct 2017 16:32:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1533792419559-6d41ef666ba1?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=042c418df77fc962fbf9111fceb9052b" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1533792419559-6d41ef666ba1?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=042c418df77fc962fbf9111fceb9052b" alt="Learning a few Crypto pitfalls practically-Part 2"><p>NULL Hyderabad held its <a href="https://www.eventbrite.com/e/nu-hyderabad-meet-september-2017-tickets-37941805963#">September month's security meetup</a> at CA Technologies, Hyderabad. I had the opportunity to present in this meet and I chose to continue with <a href="http://blog.novogeek.com/2017/04/22/learning-a-few-crypto-pitfalls-practically-null-hyd/">April month's topic</a> - practical crypto pitfalls.</p>
<p>As always, for me presentation means demos first and slides last. This time I have spent exactly a week on the demos and as usual didn't prepare slides till the last hour :)</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">All set for tomorrow&#39;s talk-Practical Crypto Pitfalls at <a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a>. Have been working since last week on the demos. Should I make slides? ;)</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/911202869327437824?ref_src=twsrc%5Etfw">September 22, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p><strong>Topic</strong>: Regarding the topic, I have presented on <em>Padding Oracle attacks</em>. This is one topic I really struggled to grasp the low-level details. I thought presenting this topic in NULL meet is an opportunity for me to study this properly. So I have spent a week trying to understand the math behind it as well as coming up with a demo.</p>
<p><strong>Slides</strong>: Below are the slides. They only contain screenshots of my hand-written notes and screenshots of Crypto Explorer utility. Thankfully, there are several fantastic blog posts which serve as great reference materials. No point re-creating slides or writing in length about the topic. Check the references slide in the ppt for the pointers. I have also listed them at the end of this article.</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21223491&authkey=ALf6KsTaJ2aM3mA&em=2&wdAr=1.7777777777777777" width="610px" height="367px" frameborder="0">This is an embedded <a target="_blank" href="https://office.com">Microsoft Office</a> presentation, powered by <a target="_blank" href="https://office.com/webapps">Office Online</a>.</iframe>
*Note: Understanding the basics of crypto is a pre-requisite to understand padding oracle attack. I strongly recommend you to go through the slides of [April month's talk](http://blog.novogeek.com/2017/04/22/learning-a-few-crypto-pitfalls-practically-null-hyd/), in case you want a refresher.*
<p><strong>Demo Source Code</strong>:<br>
There are two parts to the demo:</p>
<ol>
<li>A web application, built in ASP.NET, which is vulnerable to Padding Oracle attack. Check my <a href="https://github.com/novogeek/PaddingOracleWebApp">PaddingOracleWebApp</a> github repo for the source.</li>
<li>A client which launches the attack on the vulnerable web app. Check my <a href="https://github.com/novogeek/CryptoExplorer">Crypto Explorer</a> utility for this. I have added &quot;Padding oracle&quot; tab.</li>
</ol>
<p><strong>Demo Video</strong>:<br>
Here is a quick video recording of the padding oracle attack:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/TCkkzT6oI50?rel=0" frameborder="0" allowfullscreen></iframe>
<p><strong>References</strong>:</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=0D7OwYp6ZEc">Udacity - Cipher Block Chaining Mode</a> -<br>
Fundamentals of how CBC mode of AES encryption works.</li>
<li><a href="https://blog.skullsecurity.org/2013/padding-oracle-attacks-in-depth">Padding oracle attacks: in depth</a> - Strongly recommend to go through this post for understanding the math part of the attack.</li>
<li><a href="https://blog.gdssecurity.com/labs/2010/9/14/automated-padding-oracle-attacks-with-padbuster.html">Automated Padding Oracle Attacks with PadBuster</a> - Strongly recommend to go through this post for a pictorial understanding of the attack. Beautifully captured!</li>
<li><a href="https://github.com/martani/Padding-Oracle-Attack">Martani's implementation of Padding Oracle Attack in C#</a> - My demo is based out of this. Check this out for C# implementation of the attack.</li>
<li><a href="https://erlend.oftedal.no/blog/poet/">Erlend Oftedal's web app demonstrating padding oracle</a> - A fantastic JavaScript based visualization of the attack.</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Learning a few Crypto pitfalls practically-Part 1]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>NULL Hyderabad held its <a href="https://www.eventbrite.com/e/nu-hyderabad-meet-april-2017-tickets-33771982910#">April month's security meetup</a> at J.P Morgan Chase, Hyderabad. This time, there was a turn out of about 150 people! Glad to see that security enthusiasts in Hyderabad are increasing :) This time, I have presented on &quot;Learning a few Crypto pitfalls, practically&quot;.</p>
<p>Whenever</p>]]></description><link>https://blog.novogeek.com/learning-a-few-crypto-pitfalls-practically-null-hyd/</link><guid isPermaLink="false">5e0a722c70438418649f5d2c</guid><category><![CDATA[Talks]]></category><category><![CDATA[Security]]></category><category><![CDATA[Null Hyd]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 22 Apr 2017 12:32:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1518832136475-59f7f4e1351b?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=b3e43bc1e019fa02da5795f0d0858c7c" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1518832136475-59f7f4e1351b?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=b3e43bc1e019fa02da5795f0d0858c7c" alt="Learning a few Crypto pitfalls practically-Part 1"><p>NULL Hyderabad held its <a href="https://www.eventbrite.com/e/nu-hyderabad-meet-april-2017-tickets-33771982910#">April month's security meetup</a> at J.P Morgan Chase, Hyderabad. This time, there was a turn out of about 150 people! Glad to see that security enthusiasts in Hyderabad are increasing :) This time, I have presented on &quot;Learning a few Crypto pitfalls, practically&quot;.</p>
<p>Whenever I commit for giving a talk, I always visualize (may be <em>fantasize</em> is the right word :p) about my demos first,  and start writing code. I usually end up preparing slides on the day of the talk. Apparently, I am quite consistent at this, as evident from this old tweet :p</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Spent the last couple of days on demos for today&#39;s talk at <a href="https://twitter.com/nullhyd">@nullhyd</a>. Realized that I don&#39;t have a ppt yet! 1 hr to go. This doesn&#39;t change!</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/787121771010850816">October 15, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Coming to the topic, I wasn't sure what to propose and I led myself into a trap this time ;) Primarily I work on securing apps developed using Microsoft technologies (ASP.NET Core, Azure PaaS etc.). Since I know that almost 99% of my audience are from non-Microsoft-tech background, I'm sure it would sound like Astro-Physics if I go into the nuances of what I work on. So I thought of choosing a generic topic and thought about covering the basics of Crypto. Touching Crypto without going into the basic Math of it is hard, and doing a talk on it without demos is sin! It is easy to do basic demos, but I wanted to tinker and expand my learning.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">.<a href="https://twitter.com/nullhyd">@nullhyd</a> The learning I had in the last few days is amazing! Well, I thought to do an intro session, but I now think it may go beyond intro ;)</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/855441126194429953">April 21, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Precisely for this, I have changed the title of my talk from &quot;Practical Crypto 101&quot; to &quot;Learning a few Crypto pitfalls, practically&quot;. Though a part of the content was more than absolute basics for some, I am sure it was useful.</p>
<p>Though the talk was for about 1.5 hrs, I spent more than 30 hours building the demos. Most of the time went into understanding the theoretical side of it. I have built a simple utility, Crypto Explorer, to graphically demonstrate certain weaknesses in poor Cryptography implementations. Specifically, it demonstrates the weakness in Stream Cipher key stream reuse, and Block cipher ECB mode. You can find the source code of the utility <a href="https://github.com/novogeek/CryptoExplorer">at this Github repo</a>. I have built it in WPF and C#.</p>
<p>For me, demos give a plan of how I should organize the content and slides only help me set the flow. Typically, I polish the slides post my talk so that I can expand the technicalities as per the discussion in the talk. So here are the (polished) slides of my talk:</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21223492&authkey=AMU5VR1_D7Etkqw&em=2&wdAr=1.7777777777777777" width="610px" height="367px" frameborder="0">This is an embedded <a target="_blank" href="https://office.com">Microsoft Office</a> presentation, powered by <a target="_blank" href="https://office.com/webapps">Office Online</a>.</iframe>
<p>Here is a quick demo of Crypto Explorer. I really enjoyed building this :)</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6qZFMjVDgiw" frameborder="0" allowfullscreen></iframe>
<p>There were several interesting challenges in building this. E.g., If you thought that encrypting an image is same as encrypting a file (simply run it through an encryption algorithm), you are wrong! The demo requires the image to be rendered on screen. So if you encrypt the image totally, you will be encrypting the image headers as well, thereby corrupting the image. I tried to manually split the headers/content of the image but it wasn't trivial. I ended up looking at a few Steganography projects to get an idea of how it is done. Essentially you need to read the rendered pixels, convert to byte array and encrypt it. One catch is, the same logic doesn't apply for decryption as the approach is error prone (you may not get the same encrypted byte array when you read the rendered pixels of an encrypted image). So the encrypted byte array has to be stored in memory and decryption has to be done on it instead of reading encrypted pixels from screen. It took some time to figure out library support for this, but thankfully <a href="https://msdn.microsoft.com/en-us/library/system.drawing.imaging.bitmapdata.aspx#Examples">MSDN had good pointers</a>.</p>
<p>On top of these implementation challenges, the learning I had in exploring the crypto side of things is amazing. The references slide has some of the sources that I explored. I couldn't cover Padding Oracle in detail in the talk, but hope I can cover it some other time. If you are looking for a good crypto programming challenge, implement a tool to automate padding oracle attack on your own (check <a href="http://blog.gdssecurity.com/labs/2010/9/14/automated-padding-oracle-attacks-with-padbuster.html">Padbuster</a>). You will need to have a detailed understanding of Block ciphers :-)</p>
<p>Thanks to NULL, I had an extremely fruitful week. Want to discuss more about this? Drop by at the next <a href="https://twitter.com/nullhyd">NULL Hyderabad</a> meet :-)</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Securing Single Page Applications (SPA)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>NULL Hyderabad chapter's <a href="https://nullhydoct2016.eventbrite.com">October security meet</a> was hosted at Progress Software, Hyderabad on 15th October. I was given the opportunity to present on a topic of my choice. After a lot of deliberation, I have decided to present on <em>Securing Single Page Applications (SPA)</em>. Of late SPAs have been on</p>]]></description><link>https://blog.novogeek.com/securing-single-page-applications-null-hyd/</link><guid isPermaLink="false">5e0a722c70438418649f5d2b</guid><category><![CDATA[Talks]]></category><category><![CDATA[Security]]></category><category><![CDATA[Null Hyd]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 15 Oct 2016 13:35:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1528054395158-e182b41a087f?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=4d5d3264537f093519f8c8f539956bc0" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1528054395158-e182b41a087f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=4d5d3264537f093519f8c8f539956bc0" alt="Securing Single Page Applications (SPA)"><p>NULL Hyderabad chapter's <a href="https://nullhydoct2016.eventbrite.com">October security meet</a> was hosted at Progress Software, Hyderabad on 15th October. I was given the opportunity to present on a topic of my choice. After a lot of deliberation, I have decided to present on <em>Securing Single Page Applications (SPA)</em>. Of late SPAs have been on the rise and I have been reviewing some of them at work as well. Thought of sharing my learning with the community. Hopefully, it could be of some use to devs/pentesters around.</p>
<p>Frankly, I hate giving a talk without a practical demonstration of what I want to present. I believe <em>All gyan and no demo makes Jack a dull audience</em> ;) Thanks to my mentors (former Technical Evangelists at Microsoft) for inculcating this habit. When I have to give talks on a short notice (&lt;=2 days), I select a topic for which I can create a quick demo. I don't get time to prepare slides and in fact I prepare them when my previous speakers are on stage. This time, I was informed about a week in advance but I was tied up with office work. I have spent whatever time I had on preparing demos and on the day of the meet nothing has changed :)</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Spent the last couple of days on demos for today&#39;s talk at <a href="https://twitter.com/nullhyd">@nullhyd</a>. Realized that I don&#39;t have a ppt yet! 1 hr to go. This doesn&#39;t change!</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/787121771010850816">October 15, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Nevertheless, I have managed to put some slides and polished them post my talk so that they make sense for those who could not attend. Here you go:</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21150901&authkey=ANIH_ZQnbG3E8YM&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe>
<p>Even before my talk, we had security news bytes covered by Hemanth. As always, this time too it was an interactive discussion on the latest security threats. Post that, there was WiFi security session by Hruday Charan. This guy is a 17 year old college student and he already has deep hands-on knowledge on his topic. The next session too was given by a college student Prashanth on OAuth security. I seriously envy this generation kids. They have the resources to learn, amazing determination to grow and also a stage like NULL community to showcase their talent. I am sure these guys will reach great heights in their careers, given that they continue the perseverance &amp; passion.</p>
<p>On the whole, it was a great meetup with good learning and networking with security geeks. Hope to continue the tech fun in the next meet. If you are in and around Hyderabad, stay tuned to <a href="https://twitter.com/nullhyd">@nullhyd</a> for updates on the next meet.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Building Roslyn Analyzers for Fun and Profit]]></title><description><![CDATA[Hyderabad DotnetConf 2016 - Krishna's presentation - Building Roslyn Analyzers for Fun and Profit]]></description><link>https://blog.novogeek.com/roslyn-hyderabad-dotnetconf-2016/</link><guid isPermaLink="false">5e0a722c70438418649f5d32</guid><category><![CDATA[Talks]]></category><category><![CDATA[MUGH]]></category><category><![CDATA[SDL]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Mon, 05 Sep 2016 17:13:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1523800503107-5bc3ba2a6f81?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=1722c94d072620476cdd37d61f8ec32d" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1523800503107-5bc3ba2a6f81?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=1722c94d072620476cdd37d61f8ec32d" alt="Building Roslyn Analyzers for Fun and Profit"><p>Microsoft User Group Hyderabad (<a href="http://mugh.net">MUGH</a>) is back with yet another full-day event on cutting edge Microsoft Technologies! <a href="https://themugh.github.io/dotnetConf/2016/">Hyderabad DotNetConf 2016</a> was held on 27th August 2016 and it has covered the latest tech presentations on ASP.NET Core, Windows 10 Anniversary update and Dev APIs, Deploying ASP.Net Core Apps on Docker, Building Roslyn Analyzers, Xamarin Forms and Universal Windows Platform (UWP)</p>
<p>I have presented on <strong>Building Roslyn Analyzers for Fun and Profit</strong>. Below are the slides. The session was primarily demo-driven and the slides only give a brief intro. Strongly recommend to go through the references to do a deep-dive into Roslyn.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21140156&authkey=AGzVk0U2ThwnwQk&em=2" width="660" height="440" frameborder="0" scrolling="no"></iframe><!--kg-card-end: html--><p>And yours truly below :)</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">About to start my session on <a href="https://twitter.com/hashtag/Roslyn?src=hash&amp;ref_src=twsrc%5Etfw">#Roslyn</a> at <a href="https://twitter.com/hashtag/dotnetConf2016Hyd?src=hash&amp;ref_src=twsrc%5Etfw">#dotnetConf2016Hyd</a>. Lots of hard core demos. <a href="https://twitter.com/hashtag/mugh?src=hash&amp;ref_src=twsrc%5Etfw">#mugh</a> <a href="https://twitter.com/mughtwits?ref_src=twsrc%5Etfw">@mughtwits</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/769449724613042176?ref_src=twsrc%5Etfw">August 27, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><!--kg-card-begin: html--><img src="https://bnz05pap002files.storage.live.com/y4mpHGIKElBET6xv6aON151uzhvT_EU5PsHHO0SJPAfXm-IUUFNBlYMuJ3UtNsQZxQrXF8KhD5lmQi_7mW-eDytrQb7amsnpy3-u_6Y3bdbaZASKvKOUz1kJ16W8YgOHmWZ461Wk18dH57fx-enhKQH5BgJFftJ8Pmtdb2CzSeiVZWG5Nxurluf_LXzheulsbp4?width=660&height=440&cropmode=none" width="660" height="440" alt="Building Roslyn Analyzers for Fun and Profit"><!--kg-card-end: html--><p>As usual, I had the challenge of taking the post-lunch session and glad that I had attentive audience :)</p><!--kg-card-begin: html--><img src="https://bnz05pap002files.storage.live.com/y4mOlcmyIHPTQ8bCk7DBnJGCqttDFSfjrcSYMKxJHFlwrov7eob8PbrL-iok7FNkMtBQl9LwLWyA6eCMh8hf_TFNfa2Mo2amJrVkuFEdvLFiUX3rn4x0PEthCUgIXvzXnd2ly95yeK8688XNcEvotKa-NYlx-W9szDVtOoQuUCgweEL0QHu-U1Gz-atSGlRNyWF?width=660&height=440&cropmode=none" width="660" height="440" alt="Building Roslyn Analyzers for Fun and Profit"><!--kg-card-end: html--><p>Here are the speakers of the event:</p><!--kg-card-begin: html--><img src="https://by3302files.storage.live.com/y4mLU8GAfvFEKsWLkpjCu7RF3oCjvEFmaZ6WI2boVy0bhHHFChV5R1VjoGlMPztknB75Phs94cT4yMHvr0ZjgzxJsgc2lChvJAfRvo5FESyrOrKnYufKQKjhlMvea5rfPaYcS0PaA1Y67Yb8cdkl8sI661GVBQfcaQ2Hld_WmWxERTLvVtRqDyvmCo-bospXsL6?width=660&height=440&cropmode=none" width="660" height="440" alt="Building Roslyn Analyzers for Fun and Profit"><!--kg-card-end: html--><p>Glad that the effort spent by organizing team and the speakers got the returns. i.e., happy and satisfied audience :)</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Great stuff wonderful conference thanks to all speakers <a href="https://twitter.com/techieshravan?ref_src=twsrc%5Etfw">@techieshravan</a> <a href="https://twitter.com/a_pranav?ref_src=twsrc%5Etfw">@a_pranav</a> <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> <a href="https://twitter.com/mughtwits?ref_src=twsrc%5Etfw">@mughtwits</a> <a href="https://twitter.com/dotnetartisan?ref_src=twsrc%5Etfw">@dotnetartisan</a> <a href="https://twitter.com/hashtag/dotnetconf16hyd?src=hash&amp;ref_src=twsrc%5Etfw">#dotnetconf16hyd</a></p>&mdash; Sreeranga Prasad Sane (@SreerangaS) <a href="https://twitter.com/SreerangaS/status/769527701333905408?ref_src=twsrc%5Etfw">August 27, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>And finally, </p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/AbhijitJana?ref_src=twsrc%5Etfw">@abhijitjana</a> <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> <a href="https://twitter.com/dotnetartisan?ref_src=twsrc%5Etfw">@dotnetartisan</a> <a href="https://twitter.com/a_pranav?ref_src=twsrc%5Etfw">@a_pranav</a> <a href="https://twitter.com/SRavi_Kiran?ref_src=twsrc%5Etfw">@sravi_kiran</a> <a href="https://twitter.com/techieshravan?ref_src=twsrc%5Etfw">@techieshravan</a> thank you all for making <a href="https://twitter.com/hashtag/dotnetConf16Hyd?src=hash&amp;ref_src=twsrc%5Etfw">#dotnetConf16Hyd</a> a big success <a href="https://twitter.com/hashtag/mugh?src=hash&amp;ref_src=twsrc%5Etfw">#mugh</a></p>&mdash; Microsoft User Group Hyderabad (MUGH) (@mughtwits) <a href="https://twitter.com/mughtwits/status/769525992679350272?ref_src=twsrc%5Etfw">August 27, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure>]]></content:encoded></item><item><title><![CDATA[Thinking about Secure Design]]></title><description><![CDATA[<p><a href="https://twitter.com/nullhyd">NULL Hyderabad</a> monthly security meet is back! I had to give a talk on a short notice and I didn't have enough time to prepare for a good demo-driven technical topic. While it is easy for me to do any basic topic, I wanted to take this as a challenge</p>]]></description><link>https://blog.novogeek.com/thinking-about-secure-design/</link><guid isPermaLink="false">5e0a722c70438418649f5d34</guid><category><![CDATA[Talks]]></category><category><![CDATA[Null Hyd]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 28 May 2016 06:00:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1490383559880-5003a7baa963?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=ec6e6a54dd5dffece607728122c93994" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1490383559880-5003a7baa963?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=ec6e6a54dd5dffece607728122c93994" alt="Thinking about Secure Design"><p><a href="https://twitter.com/nullhyd">NULL Hyderabad</a> monthly security meet is back! I had to give a talk on a short notice and I didn't have enough time to prepare for a good demo-driven technical topic. While it is easy for me to do any basic topic, I wanted to take this as a challenge and THINK on what best I can give in the limited time I have. I wanted to be creative (read crazy :D).</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Had to give a talk at <a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a> due to changes in plan. Got a crazy idea last night. Going to connect seemingly unrelated dots <a href="https://twitter.com/hashtag/nullhyd?src=hash&amp;ref_src=twsrc%5Etfw">#nullhyd</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/736428199345672192?ref_src=twsrc%5Etfw">May 28, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>Yeah, I wanted to connect two seemingly unrelated dots, both of which I had decent exposure to - <strong>Security </strong>and the game of 64 squares, <strong>Chess</strong>. If you see, both have several intersection points - Threats, Weaknesses, Attackers, Defenders, Traps, Mitigations (Defenses), Strategies, Tactics and the list goes on. What else can give me better analogies to explain about <strong>Secure Design</strong>? Surprising that I never got this thought till now. At times, you tend to think better when you have a strong force demanding excellence, and you love the force. Isn't it :)</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">How deep you think about <a href="https://twitter.com/hashtag/threats?src=hash&amp;ref_src=twsrc%5Etfw">#threats</a> while designing <a href="https://twitter.com/hashtag/systems?src=hash&amp;ref_src=twsrc%5Etfw">#systems</a> <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> teaches you how to think. <a href="https://twitter.com/hashtag/nullhyd?src=hash&amp;ref_src=twsrc%5Etfw">#nullhyd</a> <a href="https://twitter.com/hashtag/security?src=hash&amp;ref_src=twsrc%5Etfw">#security</a> <a href="https://t.co/3W8REVAnR2">pic.twitter.com/3W8REVAnR2</a></p>&mdash; Sanjeev Jaiswal (@jassics) <a href="https://twitter.com/jassics/status/736456134769430528?ref_src=twsrc%5Etfw">May 28, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>Here are the slides of my talk:</p><!--kg-card-begin: html--><iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21123905&authkey=ADmTF7yX7PS-5r4&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe><!--kg-card-end: html--><p></p><p>If you know basic Chess moves, I would recommend to go through the positions. They are damn interesting! Particularly, you should not miss the game-<a href="http://www.chessgames.com/perl/chessgame?gid=1233404">The Opera House Massacre</a>. In the slides, you will also see a blindfold Chess trainer. I have created it in 2009 just to practice blindfolded chess, but I have never used it. However, I gave the link to a couple of Chess academies so that they can use it to train their students. While I have built it for fun, little did I realize that it is going to help several hundreds of students. Came to know from a Chess coach (my friend) that several young kids use it in their daily practice. You can find the source code of tool at <a href="https://github.com/novogeek/blindfold-chess-trainer">this Github repo</a>.</p><p>While I am not sure if the audience got the Chess related intricacies in the slides, I think I could bring out the analogies and bring out the message. At least, the audience stayed glued till the end of the talk, though it was lunch time (1.30 PM already). So I would take the benefit of doubt ;)</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/novogeek?src=hash&amp;ref_src=twsrc%5Etfw">#novogeek</a> is rocking here in <a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a> <a href="https://twitter.com/null0x00?ref_src=twsrc%5Etfw">@null0x00</a> <a href="https://twitter.com/hashtag/nullhyd?src=hash&amp;ref_src=twsrc%5Etfw">#nullhyd</a> <a href="https://twitter.com/hashtag/infosec?src=hash&amp;ref_src=twsrc%5Etfw">#infosec</a> <a href="https://twitter.com/hashtag/learn?src=hash&amp;ref_src=twsrc%5Etfw">#learn</a> <a href="https://twitter.com/hashtag/basics?src=hash&amp;ref_src=twsrc%5Etfw">#basics</a> <a href="https://t.co/1E2EWN8c9R">pic.twitter.com/1E2EWN8c9R</a></p>&mdash; Mahesh Bheema (@0xmahesh) <a href="https://twitter.com/0xmahesh/status/736462129557970945?ref_src=twsrc%5Etfw">May 28, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>NULL Hyd team has started covering OWASP Top 10 as a series. This time it was on <em>A2-Broken Authentication and Session Management</em> and <a href="https://twitter.com/0xmahesh">Mahesh Bheema</a> has done a decent job in explaining it from ground up! Also, we had security news bytes by Vamsi and attacking OAuth by Prashanth.</p><p>We had a surprise visitor in this meet - <a href="https://twitter.com/tunnelshade_">Bharadwaj Machiraju</a>. The <a href="https://www.owasp.org/index.php/OWASP_OWTF">OWTF</a> guy was in full swing and explained how he is attempting to make machines do the job for him (Machine Learning that is!)</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/OWTF?src=hash&amp;ref_src=twsrc%5Etfw">#OWTF</a> in action by its lead <a href="https://twitter.com/tunnelshade_?ref_src=twsrc%5Etfw">@tunnelshade_</a>  at <a href="https://twitter.com/hashtag/nullhyd?src=hash&amp;ref_src=twsrc%5Etfw">#nullhyd</a> <a href="https://twitter.com/hashtag/owasp?src=hash&amp;ref_src=twsrc%5Etfw">#owasp</a> <a href="https://twitter.com/hashtag/infosec?src=hash&amp;ref_src=twsrc%5Etfw">#infosec</a> <a href="https://twitter.com/hashtag/security?src=hash&amp;ref_src=twsrc%5Etfw">#security</a> <a href="https://twitter.com/hashtag/LearningFirst?src=hash&amp;ref_src=twsrc%5Etfw">#LearningFirst</a> <a href="https://twitter.com/hashtag/HackLearning?src=hash&amp;ref_src=twsrc%5Etfw">#HackLearning</a> <a href="https://t.co/xE5zy5kGT0">pic.twitter.com/xE5zy5kGT0</a></p>&mdash; Sanjeev Jaiswal (@jassics) <a href="https://twitter.com/jassics/status/736445649072316416?ref_src=twsrc%5Etfw">May 28, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>Bharadwaj has always been an inquisitive and energetic guy and glad that he is aiming to do amazing things in security. Watch out this guy! On the whole, we had yet another fantastic meet. We are growing!</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/nullhyd?ref_src=twsrc%5Etfw">@nullhyd</a> <a href="https://twitter.com/novogeek?ref_src=twsrc%5Etfw">@novogeek</a> <a href="https://twitter.com/tunnelshade_?ref_src=twsrc%5Etfw">@tunnelshade_</a>  brothers u made my day <a href="https://t.co/BwIxnFyNET">pic.twitter.com/BwIxnFyNET</a></p>&mdash; sri karthik (@ZuRi_1993) <a href="https://twitter.com/ZuRi_1993/status/736501900544118784?ref_src=twsrc%5Etfw">May 28, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><blockquote><em>I am a Chess enthusiast and fortunately got trained by brilliant professional Chess coaches during my Engineering days (2003-07). I have played in a few district, inter-zonal tournaments and participated in All India Inter University championship in 2006. I am not a FIDE rated player and gave up participating in tournaments after I got into IT profession. Chess is addiction - Once you learn it properly, you cannot get rid of it. While I don't do serious practice anymore, I enjoy playing blitz almost every day. Check out <a href="https://www.chess.com/blog/novogeek">my Chess blog</a> for some of my little adventures</em></blockquote>]]></content:encoded></item><item><title><![CDATA[Modern Authentication for web apps with Identity Server]]></title><description><![CDATA[Modern Authentication for web apps with Identity Server]]></description><link>https://blog.novogeek.com/null-hyderabad-security-meet-april-2016/</link><guid isPermaLink="false">5e0a722c70438418649f5d33</guid><category><![CDATA[Talks]]></category><category><![CDATA[Identity]]></category><category><![CDATA[Null Hyd]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 23 Apr 2016 07:30:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1518530179311-641ebb3b6b1f?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=33d4d3ece739e174927feb6d08a5d349" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1518530179311-641ebb3b6b1f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=33d4d3ece739e174927feb6d08a5d349" alt="Modern Authentication for web apps with Identity Server"><p>Just a week after <a href="http://novogeek.com/2016/04/16/global-azure-boot-camp-2016-hyd/">Global Azure Boot Camp</a>, we had <a href="https://www.eventbrite.com/e/nu-hyderabad-meet-april-2016-tickets-24737336038">Null Hyderabad security meet</a> and I was supposed to give a talk. I planned to repeat the Modern web authentication scenarios talk which I have presented at the Azure boot camp. But to satisfy my technical side, here is what I have done:</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">I have presented this last week at <a href="https://twitter.com/hashtag/mughazure?src=hash">#mughazure</a> using <a href="https://twitter.com/azuread">@azuread</a>. For fun I&#39;m rebuilding the demos using <a href="https://twitter.com/IdentityServer">@IdentityServer</a> ;) <a href="https://twitter.com/nullhyd">@nullhyd</a> <a href="https://twitter.com/mughtwits">@mughtwits</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/723202060485713921">April 21, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
I could have made my job easy by running the same slides, but I have set a personal challenge of rewriting the demos using [Identity Server](https://identityserver.github.io/Documentation/), instead of [Azure AD](https://azure.microsoft.com/en-in/documentation/articles/active-directory-authentication-scenarios/) as the identity provider. The result - I have learnt some of the low-level implementation details of OpenIdConnect and OAuth 2.0 protocols by playing around with IdentityServer APIs.
<p>Here are the slides of my talk:</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21123871&authkey=AEZ-vDzvJk2STxM&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe>
<p>I have hinted Null Hyderabad core team that I would take longer that the usual time and here is how it ended up :)</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Enjoyed presenting at <a href="https://twitter.com/nullhyd">@nullhyd</a> meet today. Touched the basics of OAuth 2.0 &amp; OpenIdConnect. Good audience..it went for 2.5 hrs!</p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/723909146869829635">April 23, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>One of the highlights of the meet was a talk by a 10+1 student! See how smart the next gen kids are turning out to be! I haven't switched on a computer till I was in the 2nd year of my Bachelor's degree and today we have a student doing a security talk in an open security community. I hope this will be an inspiration not only to rest of the college kids but also to working professionals who while away their time.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">A 10+1 student is presenting at null hyd.. His dad accompanied him to meet. <a href="https://twitter.com/nullhyd">@nullhyd</a> <a href="https://twitter.com/null0x00">@null0x00</a> <a href="https://t.co/A3Wdr3CLd5">pic.twitter.com/A3Wdr3CLd5</a></p>&mdash; Hari (@vhssunny1) <a href="https://twitter.com/vhssunny1/status/723740699418595328">April 23, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>On another note, <a href="https://twitter.com/raghunath24">Raghunath</a>, one of the co-founders of NULL Hyderabad and the backbone of the community since its inception, was leaving Hyderabad. While we are happy that he is moving abroad for a much bigger goal, we are sad that we will miss his contributions to the community.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Thank you <a href="https://twitter.com/raghunath24">@raghunath24</a> for your relentless contributions to <a href="https://twitter.com/nullhyd">@nullhyd</a> and <a href="https://twitter.com/null0x00">@null0x00</a>. We will miss you. Good luck! <a href="https://t.co/YqPQj1TsDj">pic.twitter.com/YqPQj1TsDj</a></p>&mdash; NULL Hyderabad (@nullhyd) <a href="https://twitter.com/nullhyd/status/723753268187275264">April 23, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
I think one of the greatest qualities of passionate community contributors/leaders is that they help to inspire and create more such contributors and pass on the torch before they move on. Thanks to the initial efforts of [Imran](https://twitter.com/secfigo) and [Raghu](https://twitter.com/raghunath24) -  Today we have a vibrant core group at [Null Hyderabad chapter](https://twitter.com/nullhyd), and a much energetic security community!<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Modern Authentication for web apps with Azure AD]]></title><description><![CDATA[Modern Authentication for web apps with Azure Active Directory]]></description><link>https://blog.novogeek.com/global-azure-boot-camp-2016-hyd/</link><guid isPermaLink="false">5e0a722c70438418649f5d31</guid><category><![CDATA[Talks]]></category><category><![CDATA[MUGH]]></category><category><![CDATA[Identity]]></category><category><![CDATA[Security]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Krishna Chaitanya T]]></dc:creator><pubDate>Sat, 16 Apr 2016 06:42:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1511367461989-f85a21fda167?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=dea544090bbd55c8205d84264b6979d1" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1511367461989-f85a21fda167?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=dea544090bbd55c8205d84264b6979d1" alt="Modern Authentication for web apps with Azure AD"><p>Glad to say that I had the opportunity to present at <a href="http://themugh.github.io/gabc2016/">Global Azure Boot Camp 2016, Hyderabad</a>. It was a full day event organized by <a href="http://mugh.net">Microsoft User Group Hyderabad</a>, covering deep dive sessions on Azure for Developers, Architects and IT Pro's. Similar to its previous editions, this event was held simultaneously at several hundreds of locations across the globe - The power of Microsoft's community contributors!<br>
The best part is, the event organized at Hyderabad turned out to be the largest Global Azure Bootcamp with 350+ techies as its audience!</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Record attendance ..350 developers, 10 star speakers, 8 hours...at <a href="https://twitter.com/mughtwits">@mughtwits</a> <a href="https://twitter.com/hashtag/GlobalAzure?src=hash">#GlobalAzure</a> <a href="https://twitter.com/hashtag/mughazure?src=hash">#mughazure</a> <a href="https://t.co/sN1WbXuTAQ">pic.twitter.com/sN1WbXuTAQ</a></p>&mdash; DoDo Coder (@sudhakr) <a href="https://twitter.com/sudhakr/status/721203367058350080">April 16, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>The highlight of the day was the keynote by <a href="https://twitter.com/janakiramm">Mr. Janakiram MSV</a>, the renowned Cloud/IoT expert! Janakiram has mesmerized the crowd with his amazing demos around IoT. Also, his talk was very motivating and brought good energy</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Glowing <a href="https://twitter.com/hashtag/IoT?src=hash">#IoT</a> at GABC 2016 <a href="https://twitter.com/hashtag/globalazure?src=hash">#globalazure</a> <a href="https://twitter.com/hashtag/mughazure?src=hash">#mughazure</a> <a href="https://twitter.com/hashtag/mughazure16?src=hash">#mughazure16</a> <a href="https://t.co/etrJtnr3us">pic.twitter.com/etrJtnr3us</a></p>&mdash; MS User Group Hyd (@mughtwits) <a href="https://twitter.com/mughtwits/status/721202965718114304">April 16, 2016</a></blockquote>
<p>The event was well planned and the sessions were very interesting till the end.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">It is 6pm and folks are still glued.. Still running full house <a href="https://twitter.com/hashtag/mughazure?src=hash">#mughazure</a> <a href="https://twitter.com/hashtag/mughazure16?src=hash">#mughazure16</a> <a href="https://twitter.com/hashtag/globalazure?src=hash">#globalazure</a> <a href="https://twitter.com/mughtwits">@mughtwits</a> <a href="https://t.co/SbC57ilWF3">pic.twitter.com/SbC57ilWF3</a></p>&mdash; Krishna Chaitanya T (@novogeek) <a href="https://twitter.com/novogeek/status/721313733516009472">April 16, 2016</a></blockquote>
<p>I have presented on <strong>Modern Authentication for web apps with Azure Active Directory</strong>. Here are the slides:</p>
<iframe src="https://onedrive.live.com/embed?cid=18ABF2C9D0271BB5&resid=18ABF2C9D0271BB5%21123873&authkey=AHcq4PXoiqp6kAA&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe>
<p>Check out the pics from the event at <a href="https://www.facebook.com/media/set/?set=a.1113791571996773.1073741847.125808384128435&amp;type=3">MUGH's Facebook page</a> . While the MUGH Core team has put tremendous efforts in organizing the event flawlessly, the silent hero behind this event (in fact, for almost every MUGH event) was <a href="https://twitter.com/techieshravan">Mr. Shravan Kumar Kasagoni</a>. This guy can plan and organize a tech event of any scale almost single-handed! Not to forget, he is a Microsoft MVP and has been a core community contributor for Hyderabad since the past 5+ years. Kudos <a href="http://theshravan.net">Shravan</a>!</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>