<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Fadi Abdulwahab's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/fabdulwahab/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/feed.xml</link>
    <description>SharePoint 2013 ,SharePoint Server 2010 ,FAST Search Server 2010 for SharePoint , Administration and more</description>
    <lastBuildDate>Tue, 23 Feb 2016 19:05:44 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SharePoint doesn't redirect to ADFS login page</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/sharepoint-doesnt-redirect-to-adfs-login-page</link>
      <pubDate>Thu, 11 Feb 2016 00:21:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2016/02/11/sharepoint-doesnt-redirect-to-adfs-login-page/</guid>
      <description><![CDATA[Suddenly , SharePoint stop redirecting to _trust/default.aspx which redirect to ADFS login page to...]]></description>
      <content:encoded><![CDATA[<p>Suddenly , SharePoint stop redirecting to <strong>_trust/default.aspx </strong>which redirect to ADFS login page to obtain for the user login and it shows the NTLM login windows.</p>
<p><strong>Fix:</strong></p>
<p>Make sure <strong>AAM</strong> is configured rightly , if the SharePoint site with ADFS authentication extended with the Internet Zone then make sure AAM has the right Internet zone.</p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint doesn't redirect to /Pages/default.aspx</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/sharepoint-doesnt-redirect-to-pagesdefault-aspx</link>
      <pubDate>Thu, 11 Feb 2016 00:14:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2016/02/11/sharepoint-doesnt-redirect-to-pagesdefault-aspx/</guid>
      <description><![CDATA[Suddenly , SharePoint stop redirecting to /Pages/Default.aspx if the user don't write the complete...]]></description>
      <content:encoded><![CDATA[<p><span>Suddenly , SharePoint stop redirecting to <strong>/Pages/Default.aspx</strong> if the user don't write the complete URL. For example if the user request only the domain name http://test&nbsp;without&nbsp;/pages/default.aspx it will ask&nbsp;repeatedly&nbsp;for login with no success.</span></p>
<p><strong>Fix:</strong></p>
<ol>
<li>Make sure <strong>AAM</strong> is configured rightly</li>
<li><span>Make sure <strong>Everyone</strong> has&nbsp;read-only&nbsp;permission&nbsp;in the following folder C:\inetpub\wwwroot\wss\VirtualDirectories\<strong>web application</strong> (also make sure&nbsp;\_app_bin has the same permission)</span></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>My experience with USB Rubber Ducky</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/my-experience-with-usb-rubber-ducky</link>
      <pubDate>Fri, 05 Feb 2016 09:39:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2016/02/05/my-experience-with-usb-rubber-ducky/</guid>
      <description><![CDATA[USB RUBBER Ducky is&nbsp;


Social engineering tool
Keyboard looks like USB
Because Human use...]]></description>
      <content:encoded><![CDATA[<p><strong>USB RUBBER Ducky</strong> is&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4812.4_a5b22440-422b-4b7a-bf0c-bbe59e0aaf0b_1024x1024_1024x1024.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4812.4_5F00_a5b22440_2D00_422b_2D00_4b7a_2D00_bf0c_2D00_bbe59e0aaf0b_5F00_1024x1024_5F00_1024x1024.jpg"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4812.4_a5b22440-422b-4b7a-bf0c-bbe59e0aaf0b_1024x1024_1024x1024.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4812.4_5F00_a5b22440_2D00_422b_2D00_4b7a_2D00_bf0c_2D00_bbe59e0aaf0b_5F00_1024x1024_5F00_1024x1024.jpg" alt="" border="0" /></a></p>
<ul>
<li>Social engineering tool</li>
<li>Keyboard looks like USB</li>
<li>Because Human use keyboards , Computer trust humans</li>
<li>Can run payloads (has simple scripting language) , key-logger , and other attacks</li>
<li>Examples of Payloads&nbsp;<a title="https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads" href="https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads">https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads</a>&nbsp;</li>
<li>Link to build the script&nbsp;<a title="http://ducktoolkit-411.rhcloud.com/Home.jsp" href="http://ducktoolkit-411.rhcloud.com/Home.jsp">http://ducktoolkit-411.rhcloud.com/Home.jsp</a></li>
<li>I run the below safe script in my PC :)</li>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4152.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4152.01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4152.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4152.01.png" alt="" border="0" /></a></div>]]></content:encoded>
    </item>
    <item>
      <title>Maximizing SharePoint Availability Whitepaper</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/maximizing-sharepoint-availability-whitepaper</link>
      <pubDate>Thu, 21 Jan 2016 08:07:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2016/01/21/maximizing-sharepoint-availability-whitepaper/</guid>
      <description><![CDATA[This technical whitepaper describes how to configure High Availability for SharePoint Server at the...]]></description>
      <content:encoded><![CDATA[<p>This technical whitepaper describes how to configure High Availability for SharePoint Server at the Database level, in addition to what is the best practices to implement AlwaysOn Availability Group in SQL Server.</p>
<p>You can download this document from TechNet Gallery&nbsp;<a title="https://gallery.technet.microsoft.com/Maximizing-SharePoint-6c313248" href="https://gallery.technet.microsoft.com/Maximizing-SharePoint-6c313248">https://gallery.technet.microsoft.com/Maximizing-SharePoint-6c313248</a></p>
<p>&nbsp;</p>
<p>The idea of this document have come from the slides I published since 3 years ago on SlideShare <a title="http://blogs.msdn.com/b/fabdulwahab/archive/2013/04/04/alwayson-in-sql-server-2012.aspx" href="http://blogs.msdn.com/b/fabdulwahab/archive/2013/04/04/alwayson-in-sql-server-2012.aspx">http://blogs.msdn.com/b/fabdulwahab/archive/2013/04/04/alwayson-in-sql-server-2012.aspx</a> about SQL Server AlwaysOn.</p>
<p>I try in this version to recover the most fundamental steps and configurations in order to implement AlwaysOn Availability Group as High Availability and Disaster Recovery solution for SharePoint Database Servers.&nbsp;</p>
<p>I will be happy with your feedback because your feedback is very important, if you have comments or new points to be added please send it to me @&nbsp;<a href="mailto:fabdulwahab@outlook.com">fabdulwahab@outlook.com</a>&nbsp;</p>
<p>Finally, treat High Availability as continuous process, it's not just about "set and forget".</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Maximizing SharePoint Security Whitepaper</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/maximizing-sharepoint-security-whitepaper</link>
      <pubDate>Tue, 29 Dec 2015 08:57:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2015/12/29/maximizing-sharepoint-security-whitepaper/</guid>
      <description><![CDATA[This technical whitepaper describes how to protect SharePoint Servers and Websites, in addition to...]]></description>
      <content:encoded><![CDATA[<p>This technical whitepaper describes how to protect SharePoint Servers and Websites, in addition to what is the best practices to maximize the SharePoint Security controls.</p>
<p>You can download this document from TechNet Gallery&nbsp;<a title="https://gallery.technet.microsoft.com/Maximizing-SharePoint-cf7f7efc" href="https://gallery.technet.microsoft.com/Maximizing-SharePoint-cf7f7efc">https://gallery.technet.microsoft.com/Maximizing-SharePoint-cf7f7efc</a>&nbsp;</p>
<p>I try in this version to recover the most common issues and security controls which related to on premises SharePoint 2010/2013 websites.</p>
<p>In next version, there are more security tests, controls and issues and of course, I will not forget the new version of SharePoint 2016.</p>
<p><span>I will be happy with your feedback because your feedback is very important, if you have comments or new points to be added please send it to me @&nbsp;</span><a href="mailto:fabdulwahab@outlook.com">fabdulwahab@outlook.com</a></p>
<p>Finally, treat security as continuous process, it's not just about"set and forget".</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Upgrading from SharePoint 2010 to SharePoint 2013</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/upgrading-from-sharepoint-2010-to-sharepoint-2013</link>
      <pubDate>Sat, 12 Sep 2015 06:31:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2015/09/12/upgrading-from-sharepoint-2010-to-sharepoint-2013/</guid>
      <description><![CDATA[In this article I will list the steps in short form and I think it's enough for Professional...]]></description>
      <content:encoded><![CDATA[<p>In this article I will list the steps in short form and I think it's enough for Professional SharePoint administrators J.</p>
<p><strong>Upgrade&nbsp;process:</strong></p>
<ol>
<li>Build new&nbsp;SharePoint&nbsp;2013 farm</li>
<li>Make&nbsp;SharePoint&nbsp;2010 content databases as Read-only (No specific&nbsp;version&nbsp;or Cumulative&nbsp;update is&nbsp;required)</li>
<li>Take backup from content databases</li>
<li>Restore these content databases to SQL Server of&nbsp;SharePoint&nbsp;2013</li>
<li>Create Web Application in&nbsp;SharePoint&nbsp;2013 with the default content database (new database)</li>
<li>Deploy any custom solution from&nbsp;SharePoint&nbsp;2010 to&nbsp;SharePoint&nbsp;2013</li>
<li>Deploy any physical files like (DLLs in bin, customization in web.confg&hellip;</li>
<li>Remove the default content database</li>
<li>Run Test-SPContentDatabase &nbsp;&ndash;Name&nbsp; &hellip; -WebApplication &hellip;<ol>
<li>Fix any missing features, WebParts, and re-run the commands</li>
</ol></li>
<li>Mount-SPContentDatabase &ndash;Name &hellip; -WebApplication &hellip;</li>
<li>Upgrade&nbsp;the UI from top bar</li>
</ol>
<p><strong>Tools to figure out any issues:</strong></p>
<ul>
<li>Event Logs</li>
<li>Logs folder</li>
<li>Health analyzer in Site Collection settings</li>
</ul>
<p><strong>Common Issues:</strong></p>
<ul>
<li>Migrate from classic-mode to claims-based authentication in SharePoint 2013 <a title="https://technet.microsoft.com/en-us/library/gg251985.aspx" href="https://technet.microsoft.com/en-us/library/gg251985.aspx">https://technet.microsoft.com/en-us/library/gg251985.aspx</a></li>
<li>Need to change the top area in custom master page after&nbsp;upgrade&nbsp;(Ribbon, Settings icon&hellip;)</li>
<li>After&nbsp;upgraded, SharePoint&nbsp;will change the custom master pages from site settings to default master pages so consider to do the following:
<ul>
<li>Get list of master pages and their websites from&nbsp;SharePoint&nbsp;2010</li>
</ul>
</li>
</ul>
<ol><ol><ol>
<li>Get-SPSite&nbsp;<a href="http://portal/" target="_blank">http://portal</a>&nbsp;| Get-SPWeb -Limit All | Select Title, URL, CustomMasterUrl | Export-Svc -Path c:\sites.cvc</li>
<li>Create script which first&nbsp;update&nbsp;the value of master pages to 15 and then create script to change the default master page from site settings</li>
</ol></ol></ol>
<ul>
<li>Custom site columns are hidden so to fix it (I think this common for any things become hidden like maybe content types&hellip;)</li>
</ul>
<ol><ol>
<li>De-Active the Feature which contains Your site Columns</li>
<li>Un-install the Feature&nbsp;</li>
<li>Copy Feature folder from /14/Template/Features to<strong>&nbsp;/15/Template/Features&nbsp;</strong></li>
<li>Install the feature with the new path</li>
<li>enable the feature with force option</li>
<li>iisreset</li>
</ol></ol>
<ul>
<li>To change any&nbsp;SharePoint&nbsp;projects from 2010 to 2013
<ul>
<li>Make sure to change the following value</li>
</ul>
</li>
</ul>
<ol><ol><ol>
<li>For framework use 4.5</li>
<li>For&nbsp;SharePoint&nbsp;path use /15</li>
<li>Change any reference of DLLs from 14 version to 15 version</li>
</ol></ol></ol>
<ul>
<li>To keep the UI in&nbsp;SharePoint&nbsp;2010 and hide the top button which ask for&nbsp;upgrade&nbsp;
<ul>
<li>#Get the site collection</li>
<li>$Site&nbsp;= Get-spsite&nbsp;"<a title="http://test" href="http://test">http://test</a>"</li>
<li>#Disable&nbsp;Upgrade&nbsp;options from UI</li>
<li>$Site.AllowSelfServiceUpgrade =&nbsp;$false</li>
</ul>
</li>
</ul>
<p>This disables&nbsp;upgrade&nbsp;options from site the collection by removing the&nbsp;upgrade&nbsp;banner and the "Upgrade&nbsp;Site Collection" button from Site collection&nbsp;upgrade&nbsp;page of site settings. So now, the only option to&nbsp;upgrade&nbsp;is: using PowerShell cmdlet:&nbsp;Upgrade-SPSite</p>]]></content:encoded>
    </item>
    <item>
      <title>Security: Protecting SQL Server Applications</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/security-protecting-sql-server-applications</link>
      <pubDate>Wed, 09 Sep 2015 11:27:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2015/09/09/security-protecting-sql-server-applications/</guid>
      <description><![CDATA[I read a good book called "Securing SQL Server, protecting your database from attackers, second and...]]></description>
      <content:encoded><![CDATA[<p>I read a good book called "<strong>Securing SQL Server, protecting your database from attackers, second and third editions by Denny Cherry</strong>" which has a lot of good information describing how to secure SQL Server databases and the best practices in clear words.</p>
<p>You can find more about this book in the following link(I encourage everyone to read it): <a title="http://securingsqlserver.com/" href="http://securingsqlserver.com/">http://securingsqlserver.com/</a></p>
<p>In this post, I will write tips related to SQL Server <strong>security</strong> and most of these tips from the above book but please note any mistakes in these tips it will be my mistake in understanding or rephrasing the words.</p>
<p><strong>(1) Security Requirement</strong></p>
<ul>
<li>Identify the columns that need to encrypt and what is the objective.</li>
<li>Protect any information which has the risk of disclosing information in case of exploiting like password and phone.</li>
<li>Identify application design problems before proceed to the next phase because it will be difficult in later phase especially after go live.</li>
<li>Security aspects begins at the beginning of the development process by identifying which data will be stored and how people will access these data.</li>
<li>Identify the risks and try to mitigate them in early phases.</li>
<li>Good Objective "All data should remain secure" but no Guidance in this phase.</li>
<li>Most of development teams focus on the core business requirement and forget the security requirements.</li>
<li>Create prototype to show the client how the core data will be presented and stored.</li>
<li>Risks to avoid:
<ul>
<li>Dynamic SQL &amp; Injections</li>
<li>Buffer overflow , for example submit input larger than the defined data type in the table</li>
<li>Disclosing error messages</li>
<li>Weak Validation for entry points</li>
<li>Brute force against databases</li>
</ul>
</li>
<li>Remember, your web site security risks could affect other web sites in the time of exploiting.</li>
<li>In some cases, lawyers need to be involved to understand the government or local policies laws and privacy requirements.</li>
</ul>
<p><strong>(2) Security Network</strong></p>
<ul>
<li>In most cases, the lockdown of Network would be under the Network teams but it's good to have knowledge understanding of other technologies.</li>
<li>Network firewall is your perimeter between internal network and internet or ISP
<ul>
<li>Can be device or software</li>
<li>Block traffic based on rules and ports
<ul>
<li>For example restrict all ports except for port 80 (HTTP) , port 433(HTTPs) and for specific IPs use port 3389 (Remote access)</li>
</ul>
</li>
<li>Some router doesn't has firewall loaded into them but can filter requests based on Access control list</li>
<li>Some firewall has additional protections like DDoS protection</li>
<li>&nbsp;Firewall can be configured to Grant (open ports) and Deny(close ports)</li>
<li>Internal servers can use private IPs to access public internet by using NAT
<ul>
<li>You can check using this site <a href="http://www.whatismyip.com/">www.whatismyip.com</a> if it returns server IP or Firewall IP</li>
</ul>
</li>
</ul>
</li>
<li>Network topology designs for applications can be</li>
<ul>
<li>Web Server on the public internet and in this case it will assign public IP address to Web server<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/0882.001.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/0882.001.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/0882.001.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/0882.001.png" alt="" border="0" /></a>&nbsp;</li>
<li>Web Server on the internal side of the network and in this case router route the traffic to internal IP addresses<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/8132.002.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/8132.002.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/8132.002.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/8132.002.png" alt="" border="0" /></a>&nbsp;</li>
<li>Web Server in the Demilitarized Zone and in this case Web server will be in zone different and SQL Server in internal zone (Recommanded)<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/1643.003.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/1643.003.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/1643.003.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/1643.003.png" alt="" border="0" /></a>&nbsp;</li>
</ul>
<li>Be restricted and block any ports don't need it to avoid risks like accessing file shares or malware.</li>
<li>OS Firewall
<ul>
<li>Another defense so enable it with the right configuration</li>
<li>In windows 2003 and previous versions , all traffic was open</li>
</ul>
</li>
<li>Phoning home when an application makes requests back to the owner of software for legitimate reasons like check for windows update (Stop automatic windows update and consider the planned patching option)
<ul>
<li>It's not necessary (block it in outbound settings)</li>
<li>Illegitimate software could use it to run commands in case of botnet or zombie attacks</li>
</ul>
</li>
<li>Examples of inbound rules in Web server
<ul>
<li>TCP to SQL Service (You can configure it by port or program)</li>
<li>UDP to SQL Browser Service</li>
<li>SMB to Network file shares</li>
<li>ICMP to allow Ping request</li>
</ul>
</li>
<li>Examples of outbound rules in SQL Server
<ul>
<li>DNS lookups to connect Active directory DNS server</li>
<li>Full access to Active directory or domain controller</li>
<li>WSUS to access patching servers</li>
<li>Network access to storage array for example in case of clustering</li>
<li>Network file share access</li>
<li>Or Access to other database servers</li>
</ul>
</li>
<li>Keep the role of SQL Server clear and don't install any unnecessary services.</li>
<ul>
<li>If the SQL Server also acting as Active directory then you need to open more ports in order to allow AD replication and other features (by doing this, you increase the risks)&nbsp;<br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/5466.001.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/5466.001.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/5466.001.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/5466.001.png" alt="" border="0" /></a>&nbsp;</li>
</ul>
<li>In Case of SQL Server cluster, mail and integration services don't use Cluster IP and they used the first IP address so consider to open traffic to outside resources for direct IPs.</li>
<li>Don't make SQL Server available on the public internet to easy access because it will be exposed to attacks.</li>
<li>SQL Server 2000, allow for blank password so consider to review the environment.</li>
<li>Upgrade the software and update solution design and consider to use at least two tier layers.</li>
<li>Use VPN (encrypted channel) to access your servers in secure way instead of place it in the public.
<ul>
<li>Or use leased line but it's costly for long distance</li>
<li>Windows Server include a VPN server called "Routing and Remote Access Services RRAS"</li>
</ul>
</li>
<ul>
<li>In case of DirectAcess role , computer should be member of AD not link VPN</li>
</ul>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/0172.001.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/0172.001.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/0172.001.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/0172.001.png" alt="" border="0" /></a></div>
<ul>
<li>Use HTTPs in the applications to prevent network monitoring.</li>
<li>Plan ahead when selecting private IPs range and consider the movement into IPv6.</li>
<li>vLANs to segment the network for easily management and security(isolate Subnet with using Firewall).</li>
<li>Secure servers physically in data center by only allow access to authorized person and use alarms and auditing.</li>
<ul>
<li>This include accessing the servers via wire or wireless</li>
</ul>
<li>Disabled unneeded ports and services.</li>
<li>Train your employees to lock their workstations and create group policy for locking computers.</li>
<li>Configure Group policy for automatic locking computers
<ul>
<li>Under user configuration &gt;&gt; Administrative Templates &gt;&gt; Control Panel &gt;&gt; Display</li>
<li>There are the settings
<ul>
<li>Screen server</li>
<li>Screen saver executable name</li>
<li>Password protect the screen saver</li>
<li>Screen saver timeout (In seconds)</li>
<li>&nbsp;Hide Screen Saver Tab (to hide it from the user)</li>
</ul>
</li>
</ul>
</li>
<li>Train your employees how to protect themselves from social engineering.</li>
<li>Common ways to find out the running instances (I will show you how to hide them to mitigate the risks)
<ul>
<li>Use <strong>sqlcmd &ndash;L</strong></li>
<li>Or by powershell <strong>[System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()</strong></li>
<li>These list could be not accurate because
<ul>
<li>If there hidden instances</li>
<li>Firewall block access to instances</li>
<li>Instance is not listening to port 1433</li>
<li>Instance is a named instance and SQL Browser is not running</li>
<li>SQL server in different subnet</li>
<li>Person request the list doesn&rsquo;t has access to SQL instance or OS</li>
</ul>
</li>
</ul>
</li>
<li>Test your network security, for example brute force the VPN or Test for SQL injection.</li>
<li>Pen testing on regular basis and it can be done by third party and this testing include the black, white or gray box testing.</li>
<li>In some countries like US, any company that takes credit cards data from customer (even if it&rsquo;s not stored) needs to able to pass some sort of PCI (Payment Card Industry) audit (laws and regulations).</li>
<li>Antivirus on SQL Server
<ul>
<li>Required CPU and RAM but it adds defense for OS and Programs</li>
<li>Prevent it from scanning any files with the extension mdf, ndf, ldf, bak, and trn (or other extensions that you use for database files)</li>
<li>Prevent it from scanning these directories:
<ul>
<li>&ldquo;:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\ MSSQL\Binn&rdquo; directory</li>
<li>Any folders with FILESTREAM data</li>
<li>Any network shares exposed as FILETABLE data</li>
<li>Folders with backup files</li>
<li>Folders with extended stored procedures</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>(3) Key Management</strong></p>
<ul>
<li>Service Master key (a Symmetric key)</li>
<ul>
<li>The top of keys hierarchy which is protected by Windows Database Protection API(DPAPI)</li>
<li>It's the key that's used to encrypt all other keys below</li>
<li>It Created by SQL Server during installation process and you can only alter it (per instance has their key)</li>
<li>Keys at the top can open keys at lower</li>
<li>Read the below graph from bottom to top</li>
</ul>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4380.Untitled.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4380.Untitled.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4380.Untitled.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4380.Untitled.png" alt="" border="0" /></a></div>
<ul>
<ul>
<li>We can secure the data either by using &ldquo;Symmetric Key&rdquo; or &ldquo;Password&rdquo; as the above graph</li>
<li>&ldquo;Symmetric Key&rdquo; can be secured via &ldquo;Certificate&rdquo;,&ldquo; Asymmetric Key&rdquo;, &ldquo;Enterprise Key Manager&rdquo;, Another &ldquo;Symmetric Key&rdquo;, or &ldquo;Password&rdquo;</li>
<li>If we store &ldquo;Symmetric Key&rdquo; using another &ldquo;Symmetric Key&rdquo; that &ldquo;Symmetric Key&rdquo; can be secured any of the ways that any other &ldquo;Symmetric Key&rdquo; can be secured</li>
<li>If &ldquo;Symmetric Key&rdquo; is secured by &ldquo;Asymmetric Key&rdquo; that &ldquo;Asymmetric Key&rdquo; can be secured via &ldquo;Database Master Key&rdquo;, &ldquo;Password&rdquo;, or &ldquo;EKM&rdquo;</li>
<li>If &ldquo;Symmetric Key&rdquo; is secured via &ldquo;Certificate&rdquo; that certificate can be secured via &ldquo;Password&rdquo; or the &ldquo;Database Master Key&rdquo;</li>
<li>&ldquo;Database Master Key&rdquo; can be secured via &ldquo;Password&rdquo; or &ldquo;Service Master Key&ldquo;</li>
<li>We can change &ldquo;Service Master Key&ldquo; if compromised or SQL service account changed (from place other than Configuration Manager) because can&rsquo;t read the old key</li>
<li>In some cases , SQL Server service can&rsquo;t regenerate &ldquo;Service Master Key&rdquo; without losing access to data which has been encrypted (data can no longer be decrypted with "Service Master Key&rdquo;) then we can use a FORCE keyword with ALTER SERVER MASTER KEY
<ul>
<li>If you have access to &ldquo;Password&rdquo; of &ldquo;Database Master Key&rdquo; then the data is still decryptable.</li>
</ul>
</li>
<li>&ldquo;Service Master Key&rdquo; should be backed up using BACKUP SERVER MASTER KEY statement each time the Service Master Key is changed</li>
<ul>
<li>Backup of &ldquo;Service Master Key&rdquo; is encrypted by a password</li>
<li>Should be stored offsite in a secure location because &ldquo;Service Master Key&rdquo; it gives an attacker access to all the encrypted data on the system</li>
</ul>
</ul>
<li>Database Master Key (a Symmetric key)</li>
<ul>
<li>It is used to encrypt all the objects within the database such as &ldquo;Symmetric Keys&rdquo;, &ldquo;Asymmetric Keys&rdquo;, and &ldquo;Certificates&rdquo;&hellip; etc.</li>
<li>Can be created by using the CREATE MASTER KEY command</li>
<li>Per Database (or catalog) has one &ldquo;Database Master key&rdquo;</li>
<li>You can configure the &ldquo;Database Master Key&rdquo; to not be encrypted by the Service Master Key.</li>
<li>When &ldquo;Database Master Key&rdquo; is changed , all of the keys which it protects must be decrypted and re-encrypted using the new &ldquo;Database Master Key&rdquo;</li>
<li>&ldquo;Database Master Keys&rdquo; should be backed up when they are changed to ensure that the data can be recovered if the key is lost in the database.
<ul>
<li>Backup of &ldquo;Database Master Keys&rdquo; is encrypted by a password</li>
<li>Should be stored offsite in a secure location</li>
</ul>
</li>
<li>&ldquo;Symmetric Keys&rdquo; , &ldquo;Asymmetric Keys&rdquo; and &ldquo;Certificates&rdquo;&nbsp;are additional keys to increase the granularity of the encrypted data within the database</li>
<li>These keys encrypted by &ldquo;Database Master Key&rdquo;</li>
<li>&ldquo;A&nbsp;Symmetric Key&rdquo;&nbsp;is a single key that is used to encrypt and decrypt data</li>
<li>&ldquo;Asymmetric Keys&rdquo;&nbsp;are the combination of a private key and a public key</li>
<li>&nbsp;&ldquo;Certificates&rdquo;&nbsp;are private or public keys that are digitally associated with an individual or device. The use of a Certificate is very similar to Asymmetric Key</li>
</ul>
<li>Enterprise password management
<ul>
<li>Manage it properly by securing the passwords and the backups for these keys</li>
<li>The most important step is to backup these keys when they are changed</li>
<li>The backups of these keys should then be stored offsite</li>
<li>Copies of the passwords for the various keys must be kept onsite (for easy access) as well as offsite</li>
</ul>
</li>
<li>Enterprise key management
<ul>
<li>In this case , third party tools create and store the keys and then given to SQL Server when need them</li>
<li>Some of these tools are physical appliances and some are software</li>
<li>For example "Alliance key Manager" from Townsend Security is physical appliance
<ul>
<li>It also available as a virtual appliance to deploy it to Hyper-V or VMware platforms</li>
</ul>
</li>
<li>Help to have more control over the key creation process
<ul>
<li>Team who manage the keys don't have access to databases and DBA don't have access to key management system</li>
<li>This follows the concept of "Separation of duties"</li>
</ul>
</li>
<li>Supported with SQL Server 2008+ enterprise editions</li>
<li>Whenever possible use a longer key for better data protection</li>
<li>Longer keys are more secure but require more CPU power to encrypt and decrypt the data while shorter keys require less CPU power but are less secure</li>
</ul>
</li>
<li>If the key will be used for "Transparent Data Encryption" then it must be created within "master" database. If the key will be used for row level using functions such EncryptByKey then the key should be created within the user database.</li>
</ul>
<div><strong>(4) Database Encryption</strong></div>
<div>
<ul>
<li>To protect your data in database.</li>
<li>No one encryption solution is correct for every database (based on requirements).</li>
<li>Remember more data you encrypt and the stronger the encryption , the more CPU power will be required
<ul>
<li>Be sure to balance the encryption requirements with the increased system load</li>
</ul>
</li>
<li>SQL Server it does support some of the most popular algorithms from weakest to strongest like DES, TRIPLE_DES, TRIPLE_DES_3KEY, RC2, RC4, RC4_128, DESX, AES_128, AES_192, and AES_256&nbsp; (this list available since SQL 2005 till SQL 2014)</li>
<li>Triple DES (or 3DES)</li>
<ul>
<li>Use DES algorithm three times for each block of data for each 64 bit block</li>
<li>Three keys are used k1,k2 and k3</li>
</ul>
</ul>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/7824.001.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/7824.001.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/7824.001.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/7824.001.png" alt="" border="0" /></a></div>
<ul>
<ul>
<ul>
<li>Has three forms
<ul>
<li>The strongest option: three keys with different values of 56 bits, represented within SQL Server as the TRIPLE_DES_3KEY algorithm or the DESX algorithm.</li>
<li>A little weaker: keys k1 and k3 use the same key values and k2 uses a different value, which is represented within SQL Server as the TRIPLE_DES algorithm.</li>
<li>A weaker TRIPLE_DES algorithm, which is backwards compatible with the DES algorithm. It uses the same key values for all the possible keys.</li>
</ul>
</li>
</ul>
</ul>
<li>RC algorithms</li>
<ul>
<li>RC2 uses a 49 bit key size</li>
<li>RC4 uses key sizes from 40 to 2048 bits , but in SQL you can select from 40 to 128 bit</li>
<li>All these are deprecated and they are weak</li>
<li>RC4 used with SSL for both SSH and HTTPs</li>
</ul>
<li>AES</li>
<ul>
<li>Has three sizes : 128 , 192 and 256 bits (AES_128 &hellip;)</li>
<li>Attacker has some success in breaking the lower end AES encryption</li>
<li>To date , the higher versions of AES have remained stable</li>
<li>C# Encryption and Decryption Example (Add&nbsp;System.Security Reference) (AES still is consider secure not like DES)</li>
</ul>
</ul>
<div>
<pre style="padding-left: 90px;"><span style="font-size: small;">static void Main(string[] args)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> var plainText = "Test";</span><br /><span style="font-size: small;"> var key = GenerateRandomNumber(32);</span><br /><span style="font-size: small;"> var iv = GenerateRandomNumber(16);</span><br /><br /><span style="font-size: small;"> var encrypted = Encrypt(Encoding.UTF8.GetBytes(plainText), key, iv);</span><br /><span style="font-size: small;"> var decrypted = Decrypt(encrypted, key, iv);</span><br /><br /><span style="font-size: small;"> Console.WriteLine("Encrypted Text = " + Convert.ToBase64String(encrypted));</span><br /><span style="font-size: small;"> Console.WriteLine("Decrypted Text = " + Encoding.UTF8.GetString(decrypted));</span><br /><br /><span style="font-size: small;"> Console.ReadLine();</span><br /><span style="font-size: small;"> }</span><br /><br /><span style="font-size: small;"> static byte[] GenerateRandomNumber(int length)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> using (var randomNumberGenerator = new RNGCryptoServiceProvider())</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> //Fixed length</span><br /><span style="font-size: small;"> var randomNumber = new byte[length];</span><br /><span style="font-size: small;"> randomNumberGenerator.GetBytes(randomNumber);</span><br /><br /><span style="font-size: small;"> return randomNumber;</span><br /><span style="font-size: small;"> }</span><br /><span style="font-size: small;"> }</span><br /><br /><span style="font-size: small;"> static byte[] Encrypt(byte[] dataToEncrypt, byte[] key, byte[] iv)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> using (var aes = new AesCryptoServiceProvider())</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> aes.Mode = CipherMode.CBC;</span><br /><span style="font-size: small;"> aes.Padding = PaddingMode.PKCS7;</span><br /><br /><span style="font-size: small;"> aes.Key = key;</span><br /><span style="font-size: small;"> aes.IV = iv;</span><br /><br /><span style="font-size: small;"> using (var memoryStream = new MemoryStream())</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> var cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write);</span><br /><span style="font-size: small;"> cryptoStream.Write(dataToEncrypt, 0, dataToEncrypt.Length);</span><br /><span style="font-size: small;"> cryptoStream.FlushFinalBlock();</span><br /><br /><span style="font-size: small;"> return memoryStream.ToArray();</span><br /><span style="font-size: small;"> }</span><br /><span style="font-size: small;"> }</span><br /><span style="font-size: small;"> }</span><br /><br /><span style="font-size: small;"> static byte[] Decrypt(byte[] dataToDecrypt, byte[] key, byte[] IV)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> using (var aes = new AesCryptoServiceProvider())</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> aes.Mode = CipherMode.CBC;</span><br /><span style="font-size: small;"> aes.Padding = PaddingMode.PKCS7;</span><br /><br /><span style="font-size: small;"> aes.Key = key;</span><br /><span style="font-size: small;"> aes.IV = IV;</span><br /><br /><span style="font-size: small;"> using (var memoryStream = new MemoryStream())</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> var cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write);</span><br /><br /><span style="font-size: small;"> cryptoStream.Write(dataToDecrypt, 0, dataToDecrypt.Length);</span><br /><span style="font-size: small;"> cryptoStream.FlushFinalBlock();</span><br /><br /><span style="font-size: small;"> var decryptBytes = memoryStream.ToArray();</span><br /><br /><span style="font-size: small;"> return decryptBytes;</span><br /><span style="font-size: small;"> }</span><br /><span style="font-size: small;"> }</span><br /><span style="font-size: small;"> }</span></pre>
</div>
<ul>
<li>Hashing</li>
<ul>
<li>One way encryption , same hash value for the same value</li>
<li>You can use MD2... MD5 and SHA or SHA1</li>
<li>With SQL 2012 , SHA2 256 or 512 was added</li>
<li>Hashing is done by HASHBYTES function (for all algorithms)</li>
<ul>
<li>Two prams : the algorithm to use and the value to hash</li>
<ul>
<li>HAShBYTES(&lsquo;MD5&rsquo;,@Password)</li>
<li>HAShBYTES(&lsquo;SHA2_256&rsquo;,@Password)</li>
</ul>
<li>Doesn&rsquo;t support string longer than 8000 bytes</li>
<ul>
<li>ASCII = 8000 char (CHAR or VARCHAR data types)</li>
<li>Unicode = 4000 char (NCHAR , NVARCHAR)</li>
</ul>
</ul>
<li>In 1996 , first collisions were identified with MD5</li>
<li>In 2005 , research able to create X.509 certificates which produced the same hash</li>
<ul>
<li>In this year , the creator of MD5 (Ron) wrote &ldquo;MD5 and SHA1 are both clearly broken&rdquo;</li>
</ul>
<li>In 2008 , researches announced that they able to use MD5 and create fake CA certificate by RapidSSL so then allow them to create certificates for websites</li>
<li>but in SQL 2008 R2 , MD5 and SHA1 are the most secure hashing algorithms that are available</li>
<ul>
<li>The only way to support more secure algorithm is to use .NET CLR assembly</li>
</ul>
<li>In SQL 2012 , introduced SHA2 which is considered this more secure</li>
<li>There are two ways to find hashed value</li>
<ul>
<li>Compared to pre-generated hashes database</li>
<ul>
<li><a href="http://tools.benramsey.com/md5">http://tools.benramsey.com/md5</a> (based on several database on the internet)</li>
</ul>
<li>Second is called a MD5 collision attack (two different values with the same hash)</li>
</ul>
</ul>
<li>SHA2 and SQL Server
<ul>
<li>In SQL 2012 , it support SHA2_256 ,SHA2_512 hashing algorithm</li>
<li>Was published in 2001 by NIST as US Federal information processing Standards</li>
<li>SHA2 fixes the security issues in SHA1</li>
<li>The first different points between SHA2_256 and SHA2_512 is the amount of CPU power required</li>
<li>The second is the size of the hash which is returned (Need to check table variables length)
<ul>
<li>256 key return 256 bit (32 bytes)</li>
<li>512 key return 512 bit (64 bytes)</li>
</ul>
</li>
</ul>
</li>
<li>Converting from MD5/SHA1 to SHA2
<ul>
<li>Decrypt the data and hash it with new algorithm</li>
<li>Adding extra columns to store the new hashes because the size is different</li>
</ul>
</li>
<li>C# Hashing Example(Add&nbsp;System.Security Reference)(Still is consider secure not like MD5)</li>
</ul>
<div>
<pre style="padding-left: 60px;"> <span style="font-size: small;">static void Main(string[] args)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;">var plainText = "Test";</span><br /><span style="font-size: small;"> var hashedMessage = HashDataSHA256(Encoding.UTF8.GetBytes(plainText));</span><br /><span style="font-size: small;"> Console.WriteLine("Hashed Message = " + Convert.ToBase64String(hashedMessage));</span><br /><span style="font-size: small;"> Console.ReadLine();</span><br /><span style="font-size: small;"> }</span><br /><br /><span style="font-size: small;"> private static byte[] HashDataSHA256(byte[] toBeHashed)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> using (var sha256 = SHA256.Create())</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> return sha256.ComputeHash(toBeHashed);</span><br /><span style="font-size: small;"> }</span><br /><span style="font-size: small;"> }</span></pre>
</div>
<ul>
<li>Encrypting Objects
<ul>
<li>To protect them from being viewed and modified by others (client side)</li>
<li>Objects supported are stored procedures and functions (table and scalar functions)</li>
<li>You simply add WITH ENCRYPTION before AS (when go to client servers)</li>
<li>Decryption of encrypted objects is Fast
<ul>
<li>But for troubleshooting loses the ability to view the estimated or actual execution plan</li>
<li>You can&rsquo;t monitor SP:StmtStarting and SP:StmtCompleted by SQL Profiler when these objects are encrypted and also can&rsquo;t view execution plans</li>
</ul>
</li>
</ul>
</li>
<li>Ways to get the code behind the encrypted objects by connecting to DAC and then querying the system catalog or use third party(cracked many years ago)</li>
<ul>
<li>You can decrypt these objects using third party tools like <a title="RedGate" href="http://www.red-gate.com/products/sql-development/sql-prompt/">RegGate</a> tool or using Dedicated Administrator Connection (DAC) or others</li>
<ul>
<li><a title="https://www.mssqltips.com/sqlservertip/2964/encrypting-and-decrypting-sql-server-stored-procedures-views-and-userdefined-functions" href="https://www.mssqltips.com/sqlservertip/2964/encrypting-and-decrypting-sql-server-stored-procedures-views-and-userdefined-functions/">https://www.mssqltips.com/sqlservertip/2964/encrypting-and-decrypting-sql-server-stored-procedures-views-and-userdefined-functions/</a></li>
</ul>
</ul>
<li>Encrypting data within Tables
<ul>
<li>Where to encrypt your data , at web server , client or database</li>
<li>Each option has pros and cons</li>
<li>At database
<ul>
<li>Pros: minimal changes to the web server</li>
<li>Cons: CPU load at database server</li>
<li>Cons: Certificate stored in database (with given enough time , any encryption schema is crackable)</li>
</ul>
</li>
<li>At application tier (Web Server or Client desktop)
<ul>
<li>Pros: spread the load across all servers</li>
<li>Cons: a load of application changes (add extra servers due to the nature of increase by 10% to 20%)</li>
</ul>
</li>
</ul>
</li>
<li>Note: Data Encryption laws
<ul>
<li>Based on company based , customer or location</li>
<li>Some has consequences if your data is leaked</li>
<li>When designing an encryption plan be sure to include legal counsel</li>
</ul>
</li>
<li>Encrypting within SQL Server
<ul>
<li>If you have SQL 2000 or older don&rsquo;t go with native support
<ul>
<li>Use third party like DLL</li>
<li>Only hashing function that you can use it is &ldquo;pwdencrypt&rdquo; , this function is deprecated in new version
<ul>
<li>undocumented function return 255 varbinary</li>
<li>SELECT pwdencrypt(&lsquo;test&rsquo;)</li>
</ul>
</li>
</ul>
</li>
<li>Starting from SQL 2005 , you can use native encryption and hashing functions</li>
<li>To encrypt data
<ul>
<li>EncryptByCert()
<ul>
<li>Certificate stored within database</li>
<li>You can easily move it from platform to another</li>
<li>Purchased from a third party like VeriSign and GoDaddy</li>
</ul>
</li>
<li>EncryptBykey()
<ul>
<li>Symmetric key</li>
<li>This key can be created by password , a certificate or another symmetric key</li>
</ul>
</li>
<li>EncryptByPassPhrase()
<ul>
<li>Passphrase is used as the key in symmetric encryption</li>
</ul>
</li>
</ul>
</li>
<li>Till &nbsp;2014, none of these can be used in SQL Azure and it will return error so you need to do it at the web tier</li>
</ul>
</li>
<li>Encrypting within Application Tier
<ul>
<li>More scalable</li>
<li>The data is transmitted between the database and the application tier is encrypted without need to configure IP Sec</li>
<li>Use .NET native functions ( you can use salt , iteration ,IV &hellip;)</li>
</ul>
</li>
<li>Moving from plain text to encrypted values in an existing application
<ul>
<li>For small application you can accept the outage</li>
<li>But for large application
<ul>
<li>Add additional column with bit data type (IsEncrypted)</li>
<li>Handle it in your application , if it&rsquo;s plain get the plain and encrypted and if it&rsquo;s encrypted then get the encrypted based on this column</li>
<li>After all data were encrypted then remove the plain text column</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>Encrypting Data at Rest
<ul>
<li>In SQL 2008 , Microsoft introduced a feature called Transport Data Encryption which encrypt the data as it&rsquo;s written to the hard disk and decrypts the data when it read from disk into memory</li>
<li>Advantages
<ul>
<li>Able to encrypt all data</li>
<li>Backup is also encrypted</li>
</ul>
</li>
<li>The encryption is done by encrypting the blocks of data instead of the data stored within the blocks
<ul>
<li>The difference between two concepts is that when the data is encrypted, only the data tables is encrypted while TDE will encrypt the metadata about the tables also &hellip;</li>
</ul>
</li>
<li>The downside , that anyone access the SQL by normal means like Injection , or SSMS then can querying the data</li>
<li>Also TDE will increase CPU load on SQL server</li>
<li>Turn On TDE , right click on database and select properties , select options , Enable encryption (true) , the data within the page will be encrypted , also data written to transaction log will encrypt</li>
<li>If you don&rsquo;t have a master key created within the database the master key must be created using the CREATE MASTER KEY command before you can enable TDE</li>
<li>Also it will be enabled for Tempdb for storing temporary data
<ul>
<li>This will cause a performance impact to other databases within your instance that use the tempdb database for storing temporary data</li>
</ul>
</li>
<li>When enable TDE , make sure to backup encryption key and store them securely
<ul>
<li>If you lose the key , you can&rsquo;t restore backup</li>
<li>If someone get the key , he can read your database backup or attach it</li>
</ul>
</li>
<li>If you&rsquo;re using Mirroring then both the primary and mirror will be encrypted (log will be encrypted during movement to protect the data from sniffing)</li>
<li>If you use full-text indexing with TDE , the data within index will be encrypted
<ul>
<li>This will not happen immediately (Microsoft is not recommend to index sensitive data using TDE)</li>
</ul>
</li>
<li>Database backup , it will use much lower amount of compression because encryption decreases the unique data</li>
<li>If you use replication , you need to enable TDE on the subscriber and distributor to have fully protected</li>
<li>TDE only with Enterprise edition (2008) or Enterprise and Data center editions (2008 R2)</li>
<li>Note: when we create the certificate we don&rsquo;t specify the expire data. By default SQL create a certificate for one year
<ul>
<li>What happened when it expire?
<ul>
<li>Nothing,because no way to renew the internal certificates that used for TDE</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>TDE and FileStream
<ul>
<li>Data written via FILESTREAM will not be encrypted (only data stored in mdf , ndf or ldf) will encrypted with DTE</li>
<li>User can access files directly via windows network share (either encrypt the files before store them to FILESTREAM or use a file-system-based encryption process (like Encryption File Stream(EFS) encryption)</li>
</ul>
</li>
<li>Log Shipping , Mirroring and Always ON
<ul>
<li>You need to first restored the encryption key to destination server to be able to restore the data</li>
<li>Also the certificate in master database should be restored</li>
<li>Then in destination server Create (restore) it</li>
<li>Delete the certificate backup file</li>
</ul>
</li>
<li>Key protection
<ul>
<li>If someone access the certificate , your data and encryption is useless</li>
<li>It&rsquo;s recommended to backups these backups and placed in a sealed envelope with signature (for tampering detection)
<ul>
<li>Also it&rsquo;s good to have another copy in different place or office</li>
</ul>
</li>
</ul>
</li>
<li>Encrypting data on the wire
<ul>
<li>To encrypt data as it flows over the network between the SQL server and client to prevent sniffing</li>
<li>Done by either SSL for the SQL connection or using IPSec to secure all network communication (or subnet of network)</li>
<li>Using SSL , you manage the encryption from SQL server and also the encryption limited to SQL packets</li>
<li>The advantage of IPSec can offload the work from CPU to a processor on the network card</li>
<li>The good example to use SSL for public connection and with report service when the user pass his credential to open the reports</li>
</ul>
</li>
<li>SQL Server over SSL
<ul>
<li>You need to acquire SSL from a trusted Certificate Authority
<ul>
<li>You can get one from internal enterprise CA or a recognized CA such as GoDaddy or others</li>
</ul>
</li>
<li>Then you need to export the certificate from the server you first requested and import it to other server if you have cluster</li>
<li>When you request a certificate you need to specify the name that your users will connect to SQL as the subject of the certificate</li>
<li>Certificate must be stored in either local store or current user store (SQL account)</li>
<li>From and to date must be valid to local system time</li>
<li>Certificate must be a server authentication Certificate that requires Enhanced Key Usage property of the Certificate to specify server authentication</li>
<li>The Certificate must be created using Key-Spec option of AT_KEYEXCHANGE, optionally the key usage property will include it</li>
<li>SQL 2008 R2 supports the use of wildcard not like the prior version</li>
<li>You can use self-signed certificates but not recommended as this opens the server up to MITM attacks where the user connects to another process , that process decrypts the connect and then forwards the connection along to the final destination while reading all traffic</li>
</ul>
</li>
<li>SQL Server 7 and 2000
<ul>
<li>No UI to tell SQL server which certificate to use. By default it will use the certificate that has the same name of SQL Server
<ul>
<li>To change the name of certificate then you need to modify the registry key (SuperSocketNetLib) (add thumbprint value)</li>
</ul>
</li>
<li>Configuring SQL 2000 to use encryption , open SQL Network Utility
<ul>
<li>Select instance you wish to configure and check the box that says &ldquo;Force protocol encryption&rdquo;</li>
<li>Restart SQL service</li>
<li>If SQL can&rsquo;t start then check the Error-Log if SQL can&rsquo;t find the certificate</li>
</ul>
</li>
</ul>
</li>
<li>SQL Server 2005 and Up
<ul>
<li>Expand &ldquo;SQL Server Network Configuration&rdquo; (if you install 32 bit in 64 bit OS then select 32 bit)</li>
<li>Go to properties , select the certificate and &ldquo;Force Encryption option&rdquo;</li>
<li>SQL will reject any connection do not support encryption if you forced and if you not then SQL will accept both connections</li>
<li>In connection string use , Force Encryption=true</li>
<li>Restart SQL Service</li>
</ul>
</li>
<li>Authentication
<ul>
<li>From SQL 2000 SP 3 + , authentication information passed between SQL and client is encrypted</li>
<li>In old version if you use Multiprotocol Net-Library also has native encryption (RPC encryption API)</li>
<li>When using TCP/IP or Named Pipes to connect to the same instance , the authentication is not encrypted using drivers older than SQL 2005 native client</li>
<li>Multiprotocol Net-Library can&rsquo;t be used to connect to named instances so no encryption is supported in SQL 2000 unless SSL used</li>
<li>SQL Server 7 don&rsquo;t support named instances</li>
</ul>
</li>
<li>Certificate Strength Differences
<ul>
<li>If it&rsquo;s from a third party like GoDaddy then it&rsquo;s most likely a 128 bit (although older certificates could be as 64 bit)</li>
<li>If it&rsquo;s from internal CA then it could be weaker than 64 bit or stronger than 128 bit</li>
<li>The difference in protection comes from the length of the private key</li>
<li>The longer the private key is the more secure the data is</li>
<li>The longer private key comes at a price as it will require more CPU power</li>
<li>Selecting the right strength is a decision of management and business
<ul>
<li>How they need the secure data</li>
</ul>
</li>
<li>Also longer encryption string is that the network will be used more by SQL Server than before
<ul>
<li>SQL Server probably has at least 1 Gig uplink</li>
<li>Maybe you need to upgrade your WAN or LAN</li>
</ul>
</li>
</ul>
</li>
<li>Managing SSL Certificates
<ul>
<li>Because all clients connect to SQL server , you need to manage SSL certificate in SQL by reissuing or change CA</li>
<li>Same configuration as first setup</li>
</ul>
</li>
<li>Hiding the instance
<ul>
<li>Hide it from listing</li>
<li>Go to SQL Server properties and select hide instance</li>
<li>Restart the service</li>
<li>User must know the name to connect</li>
</ul>
</li>
<li>IP Sec
<ul>
<li>All network communication between two computers is encrypted</li>
<li>Can be configured either on local machine or domain via group policies</li>
</ul>
</li>
<li>Encrypting Data with MPIO Drivers
<ul>
<li>Multi-path Input Output drivers are only used when SQL server connect to a storage array via either fiber channel or Internet Small computer system interface (iSCSI)</li>
<li>Needs multiple cables (multi-path) to have redundant connection</li>
<li>Some drivers like EMC PowerPath , include encryption features which encrypt and decrypt all traffic between the server and storage array
<ul>
<li>EMC purchase of RSA a few years ago</li>
</ul>
</li>
<li>The upside , nothing change in your code but the downside load in SQL CPU and also you need to manage the certificate used by MPIO driver</li>
</ul>
</li>
<li>PowerPath Encryption with RSA requirements
<ul>
<li>RKM server software that is provided by RSA</li>
<li>Certificate &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<ul>
<li>must be a password-protected PKCS#12 file</li>
<li>The hosts are authenticated against the RKM server using a PEM (Privacy Enhanced Mail) encoded trusted root certificate</li>
</ul>
</li>
</ul>
</li>
<li>Encrypting data via HBAS
<ul>
<li>Her offloaded from SQL Server CPU to the processors on the actual HBAs</li>
<li>But here you are locked into a specific vendor (Emulex)</li>
<li>Works with PowerPath drivers</li>
</ul>
</li>
<li>No single answer to the question &ldquo;How should I encrypt my database&rdquo;</li>
<li>With SQL Azure , encryption can be handled within the application tier
<ul>
<li>SQL Azure , support Hashing as the onsite server instances</li>
</ul>
</li>
<li>Key Encryption Tutorial with Script&nbsp;<a title="http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script" href="http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script">http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script</a></li>
</ul>
</div>
<p><strong>Notes:</strong></p>
<ul>
<li><span>Please test these tips before go live.</span></li>
<li><span>I will be happy with your feedback because your feedback is very important ,if you have comments or new points please send it to me @ fabdulwahab@outlook.com or Tweet me @</span><a title="https://twitter.com/fadi_abdulwahab" href="https://twitter.com/fadi_abdulwahab">https://twitter.com/fadi_abdulwahab</a><span>&nbsp;.</span></li>
</ul>
<div><strong>Change Logs:</strong></div>
<div>
<ul>
<li>Published with 4 sections .[9/9/2015]</li>
</ul>
<strong></strong></div>
<div>
<pre>&nbsp;</pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Security: Protecting SharePoint Server Applications</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/security-protecting-sharepoint-server-applications</link>
      <pubDate>Sat, 15 Aug 2015 01:05:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2015/08/15/security-protecting-sharepoint-server-applications/</guid>
      <description><![CDATA[This list helps developers and administrators to protect SharePoint Applications or portals from...]]></description>
      <content:encoded><![CDATA[<p>This list helps developers and administrators to protect SharePoint Applications or portals from common security issues which they are frequently&nbsp;reported by Health check and Penetration testing tools. Most of these issues related to disclosing information , which is related to<strong> No.6</strong> "<strong>Sensitive Data Exposure</strong>" and <strong>No.9</strong> "<strong>Using Components with known Vulnerabilities</strong>" risks in <a title="OWASP Top 10 2013" href="https://www.owasp.org/index.php/Top10#OWASP_Top_10_for_2013"><strong>OWASP</strong> Top 10 2013</a> because SharePoint is a product or framework&nbsp;<strong>"Secure by default"</strong> therefor rarely to find risks like Injection or broken Sessions in SharePoint Server applications <strong>unless&nbsp;</strong>if you develop custom applications and you host them in SharePoint as web parts or by other means then you need to consider the other risks .</p>
<p>Unfortunately, many of testing tools report <a title="False Positive" href="https://en.wikipedia.org/wiki/False_positives_and_false_negatives">False Positive</a> risks for instance I read Security testing report and one of issue was<strong> &ldquo;MongoDB NoSQL Injection&rdquo;</strong>&hellip; all of us know that SharePoint uses SQL Server only as back-end system (you can&rsquo;t install SharePoint in other RDBMS so How it can be with NoSQL Databases !!).</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/6825.Untitled.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/6825.Untitled.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/6825.Untitled.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/6825.Untitled.png" alt="" border="0" /></a></p>
<p>Most of these issues and their mitigation already published in the internet but here I will try to put them in one place to make it easy to me and others to review their SharePoint Security risks.</p>
<p>Finally before I list the points, I want to clarify that id didn't mention points related to best practices for installation, proper configuration, planning &hellip; etc. &nbsp;I assume you follow the right implementation.</p>
<p>&nbsp;</p>
<table style="border: 1px solid #000000;" border="1">
<tbody>
<tr>
<td><strong>No</strong></td>
<td><strong>Risk Details</strong></td>
</tr>
<tr>
<td style="text-align: center;"><strong>1</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;Version Disclosure (ASP.NET)</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong></p>
<p><strong>&nbsp;</strong>This information can be found in HTTP Response Header which can help the attacker to build profile against your site which then they can search for common public issues from sites like "National Vulnerability Database" <a title="https://web.nvd.nist.gov/view/vuln/search" href="https://web.nvd.nist.gov/view/vuln/search">https://web.nvd.nist.gov/view/vuln/search</a> or for zero-day attacks.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/7183.02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/7183.02.png" alt="" width="296" height="180" /></p>
<p>&nbsp;This information can be helpful in hacking phase but it doesn't mean your site will be exploited.</p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;&nbsp;Add the following setting inside the &lt;system.web&gt; element in your application's Web.config file &lt;httpRuntime enableVersionHeader="false" /&gt;</p>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a href="http://www.4guysfromrolla.com/articles/120209-1.aspx">http://www.4guysfromrolla.com/articles/120209-1.aspx</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>2</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Version Disclosure (SharePoint)</strong></span></p>
<p><strong>&nbsp;Description:</strong></p>
<p>&nbsp;Same as point 1.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/5722.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/5722.01.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/5722.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/5722.01.png" alt="" width="303" height="220" /></a></p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;It's not recommended to remove these headers and it's better to accept the risk in this case because these will affect the SharePoint crawling and other features except you have an anonymous website with limited features.</p>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a href="http://www.wictorwilen.se/sharepoint-mythbusting-the-response-header-contains-the-current-sharepoint-version">http://www.wictorwilen.se/sharepoint-mythbusting-the-response-header-contains-the-current-sharepoint-version</a></p>
<p>&nbsp;<a href="http://www.wictorwilen.se/sharepoint-2013-sharepoint-health-score-and-throttling-deep-dive">http://www.wictorwilen.se/sharepoint-2013-sharepoint-health-score-and-throttling-deep-dive</a></p>
<p>&nbsp;<a href="http://dirkvandenberghe.com/2011/06/07/remove-http-response-headers-for-internet-facing-sharepoint-sites.html">http://dirkvandenberghe.com/2011/06/07/remove-http-response-headers-for-internet-facing-sharepoint-sites.html</a></p>
<p>&nbsp;<a href="http://blog.michelbarneveld.nl/michel/archive/2009/11/08/x-sharepointhealthscore-a-new-sharepoint-2010-http-header.aspx">http://blog.michelbarneveld.nl/michel/archive/2009/11/08/x-sharepointhealthscore-a-new-sharepoint-2010-http-header.aspx</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>3</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;ASP.NET Identified</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong></p>
<p><strong>&nbsp;</strong>Same as point 1.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/0827.04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/0827.04.png" alt="" width="300" height="112" /></p>
<p><strong>&nbsp;Fix:</strong></p>
<pre> <span style="font-size: small;">Add the following setting in your application's Web.config file</span></pre>
<pre><span style="font-size: small;">&lt;httpProtocol&gt;</span><br /><span style="font-size: small;">&lt;customHeaders&gt;</span><br /><span style="font-size: small;">&lt;remove name="X-Powered-By" /&gt;</span></pre>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a href="https://ict.ken.be/removing-x-powered-by-aspnet-and-other-version-headers">https://ict.ken.be/removing-x-powered-by-aspnet-and-other-version-headers</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>4</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;Version Disclosure (IIS)</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong></p>
<p><strong>&nbsp;</strong>Same as point 1.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/3187.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/3187.05.png" alt="" width="495" height="200" /></p>
<p><strong>&nbsp;Fix:</strong></p>
<p><strong>&nbsp;</strong><span style="font-size: small;">Create custom HTTP Module as following:</span></p>
<pre><span style="font-size: small;"><strong>namespace</strong> MyNamespace</span><br /><span style="font-size: small;">{</span></pre>
<pre><span style="font-size: small;"><strong> public</strong> <strong>class</strong> HttpHeadersCleanup : IHttpModule</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"><strong> public</strong> <strong>void</strong> Init(HttpApplication context)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> context.PreSendRequestHeaders += PreSendRequestHeaders;</span><br /><span style="font-size: small;"> }</span></pre>
<pre><span style="font-size: x-small;">&nbsp;<strong>private</strong> <strong>static</strong> <strong>void</strong> PreSendRequestHeaders(<strong>object</strong> sender, EventArgs e)</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> HttpContext.Current.Response.Headers.<strong>Remove</strong>("Server");</span><br /><span style="font-size: small;"> }&nbsp;</span></pre>
<pre><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;<strong>public</strong> <strong>void</strong> Dispose()</span><br /><span style="font-size: small;"> {</span><br /><span style="font-size: small;"> }</span></pre>
<pre><span style="font-size: small;">&nbsp;&nbsp;&nbsp;}</span><br /><span style="font-size: small;">}</span></pre>
<p><span style="font-size: small;">&nbsp;Then add the following setting in web.config</span></p>
<pre><span style="font-size: small;"><strong>&lt;system.webServer&gt;</strong></span></pre>
<pre><span style="font-size: small;">&nbsp;&nbsp;&nbsp; <strong>&lt;modules&gt;</strong></span></pre>
<pre><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&lt;add</strong> name="HttpHeadersCleanup " </span><br /><span style="font-size: small;">type="MyNamespace.HttpHeadersCleanup, MyAssembly"<strong>/&gt;</strong></span></pre>
<pre><span style="font-size: small;">&nbsp;&nbsp;&nbsp; <strong>&lt;/modules&gt;</strong></span></pre>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a href="http://www.frederikvig.com/2010/11/removing-http-headers-for-asp-net-sites/">http://www.frederikvig.com/2010/11/removing-http-headers-for-asp-net-sites/</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>5</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>ViewState is not Encrypted</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong>&nbsp;</p>
<p>&nbsp;SharePoint doesn't use Viewstate to store any sensitive data such as user tokens<br /> or other so just give your security department justification and explain that Viewstate <br />required to be existed in SharePoint because it's build on top of Asp.Net Web forms.</p>
<p>&nbsp;<strong>Note:</strong></p>
<p>&nbsp;In case you have custom code using Viewstate , make sure to avoid storing sensitve data in Viewstate because it's readable and represented by base64 encoding and In case you need to use it then make sure to enable Encryption and MAC encoding for integrity.</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>6</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;Cookie Not Marked as HttpOnly</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong></p>
<p>&nbsp;In General, it's always&nbsp;recommended to set HttpOnly flag to cookies to prevent XSS script risk against these cookies like Auth Token Cookie which then it can be used in hijacking and other attacks. In SharePoint if you are using Form authentication then by default SharePoint flag Auth Token with HttpOnly but there are some cookie in SharePoint not flagged with HttpOnly like "wss_keepsessionauthenticated" .</p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;Add this setting to web.config&nbsp;</p>
<pre><span style="font-size: small;">&lt;system.web&gt;</span><br /><span style="font-size: small;"> &lt;httpCookies httpOnlyCookies="true" requireSSL="true" /&gt;</span></pre>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<span style="font-size: small;"><a title="http://murmurofawebmaster.blogspot.com/2013/07/wsskeepsessionauthenticated.html " href="http://murmurofawebmaster.blogspot.com/2013/07/wsskeepsessionauthenticated.html&amp;nbsp;">http://murmurofawebmaster.blogspot.com/2013/07/<br />wsskeepsessionauthenticated.html&nbsp;</a></span></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>7</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;Accessing _layout/ folder</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong></p>
<p>&nbsp;For anonymous SharePoint website , it's better to prevent users from accessing application pages which exists under _layout folder like /layout/Viewlsts.aspx .By default&nbsp;SharePoint has an enabled feature called "<strong>ViewFormPagesLockDown</strong>" which prevent anonymous users from accessing these pages.</p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;In case it's disable then you can activate it by the following command</p>
<p>&nbsp; Enable-SPFeature ViewFormPagesLockDown -Url http://youSite</p>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a title="http://www.c-sharpcorner.com/uploadfile/Roji.Joy/how-to-secure-external-anonymous-access-to-sharepoint-2010-sites" href="http://www.c-sharpcorner.com/uploadfile/Roji.Joy/how-to-secure-external-anonymous-access-to-sharepoint-2010-sites">http://www.c-sharpcorner.com/uploadfile/Roji.Joy/how-to-secure-external-anonymous-access-to-sharepoint-2010-sites</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>8</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Insufficient Transport Layer Protection</strong></span></p>
<p>&nbsp;<strong>Description:</strong></p>
<p><strong>&nbsp;"HTTPs everywhere"</strong>, it's a top priority to protect the information in transit by using TLS/SSL to provide secure communication. Also In case of anonymous site, it's helpful to you to increase the site rank in Google search engine using HTTPs and by the way HTTPs (represents top layer of TLS/SSL) which provides 3 goals:</p>
<ol>
<li><strong>Confidentiality</strong> to protect the data in transit from sniffing by using tools like fiddler or wireshark , hijacking or MITM attacks (Main goal).</li>
<li><strong>Integrity</strong> by protecting the data from tampering during transition so it will reject the request if anyone in the middle of transit modify the packets.</li>
<li><strong>Authenticity</strong> by tell and give the visitors assurance about your domain and who you are talking to.</li>
</ol>
<p>&nbsp;I will list all best practices to consider when implementing HTTPs in Your SharePoint Site:</p>
<ul>
<li>Configure SSL for SharePoint&nbsp;<a title="http://blogs.msdn.com/b/fabdulwahab/archive/2013/01/21/configure-ssl-for-sharepoint-2013.aspx" href="http://blogs.msdn.com/b/fabdulwahab/archive/2013/01/21/configure-ssl-for-sharepoint-2013.aspx">http://blogs.msdn.com/b/fabdulwahab/archive/2013/01/21/configure-ssl-for-sharepoint-2013.aspx</a></li>
<li>Test its security level, configuration, implementation, key strength &hellip; test it with the <strong>Qualys Lab</strong> tool <a href="https://www.ssllabs.com/ssltest/">https://www.ssllabs.com/ssltest/</a> and fix the issues and try to make the grade "<strong>A</strong>" As possible.</li>
<ul>
<li>To Disable Old Protocols ,weak ciphers and Poodle attack protection then&nbsp;follow steps in this article&nbsp;<a title="https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12" href="https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12">https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12</a></li>
</ul>
<li>Avoid Self-signed certificate , expired or invalid certificates due to lake of the authenticity.</li>
<li>Avoid Mixed content mode because still hacker can steal the session by sniffing HTTP&nbsp;content like image or js requests in HTTPs site.</li>
<li>Avoid Redirection from HTTP to HTTPs and also avoid only implementing HTTPs on login page because still hacker can steal the session by sniffing even without username and password.</li>
<li>Make sure to use "secure" cookies in case of sensitive cookies like Auth Token in Forms Membership , by using <span>&nbsp;requireSSL="true" /&gt; in web.config </span><a title="https://www.owasp.org/index.php/SecureFlag" href="https://www.owasp.org/index.php/SecureFlag">https://www.owasp.org/index.php/SecureFlag</a></li>
<li>Make sure to have end to end secure channels because in some cases they only implemented the HTTPs to load balance level only and it's better to include the internal requests</li>
<li>Use HTTP Strict Transport Security(HSTS) to force the browser to browse the site to a certain time ( based on Max age value ) in HTTPs without need to send redirection request from HTTP to HTTPs (this header not support it in all browsers). For more information , check <a href="https://www.owasp.org/index.php/HTTP_Strict_Transport_Security">https://www.owasp.org/index.php/HTTP_Strict_Transport_Security</a></li>
</ul>
<p>&nbsp;Finally you can start with "<strong>StartSSL</strong>" for free certificates <a href="https://www.startssl.com/?app=1">https://www.startssl.com/?app=1</a> or "<strong>CloudFlare</strong>" which add security controls to your site and provide fee SSL <a href="https://www.cloudflare.com/features-security">https://www.cloudflare.com/features-security</a></p>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a href="http://googlewebmastercentral.blogspot.com.au/2014/08/https-as-ranking-signal.html">http://googlewebmastercentral.blogspot.com.au/2014/08/https-as-ranking-signal.html</a></p>
<p>&nbsp;<a href="https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet">https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet</a></p>
&nbsp;<a href="http://www.troyhunt.com/2011/11/owasp-top-10-for-net-developers-part-9.html">http://www.troyhunt.com/2011/11/owasp-top-10-for-net-developers-part-9.html</a></td>
</tr>
<tr>
<td style="text-align: center;"><strong>9</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Separation of duties</strong>&nbsp;</span></p>
<p><strong>Description:</strong></p>
<p><strong></strong>&nbsp;Separation of Duties is a security principle which the process of separate sharing of more than one individual in one single task to prevent fraud and error. In case of anonymous websites this policy it can be very important and it can applies in SharePoint in many ways for examples:</p>
<ul>
<li><strong>Content deployment</strong>&nbsp;is a feature of SharePoint that you can use to deploy content from a source website to a destination website. By this way you can stop the authentication process from production server (No authentication access any more) and you can consider place production servers in DMZ for more separation.<br /><a href="https://technet.microsoft.com/en-us/library/cc262004(v=office.14).aspx">https://technet.microsoft.com/en-us/library/cc262004(v=office.14).aspx</a></li>
<li><strong>Extend SharePoint</strong> site by having two IIS website , one for anonymous access and one for admin which it can only access locally or by certain people with different authentication process and by enabling client integration features. <br /><a href="https://technet.microsoft.com/en-us/library/cc261698(v=office.14).aspx">https://technet.microsoft.com/en-us/library/cc261698(v=office.14).aspx</a></li>
</ul>
<em></em></td>
</tr>
<tr>
<td style="text-align: center;"><strong>10</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;Stack Trace and Errors Disclosure (ASP.NET)</strong>&nbsp;</strong></span></p>
<p><strong>Description:</strong>&nbsp;</p>
<p>&nbsp;It's recommended to stop disclosing information because of unhandled errors,<br /> trace and debug .With easy steps , you can prevent leaking these information which might help an attacker to gain more information and potentially focus on the development of further attacks.</p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;Change&nbsp;these settings in web.config&nbsp;<strong><br /></strong></p>
<ul>
<li>Set &lt;customErrors mode="On" on web.config</li>
<li>Remove &lt;trace enabled="false" (by default is not enabled)</li>
<li>Set &lt;compilation debug=&rdquo;false&rdquo; /&gt;</li>
<li>Set&nbsp;&lt;SafeMode CallStack="false"</li>
</ul>
<p>Also do the same in web.config file in _layout folder.</p>
<div><strong>&nbsp;</strong></div>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>11</strong></td>
<td>
<p><span style="font-size: small;"><strong>&nbsp;_<span style="font-family: 'arial black', 'avant garde';">vti_inf.html ,&nbsp;</span></strong><span style="font-family: 'arial black', 'avant garde';"><strong style="font-size: 12px;">_vti_bin ,&nbsp;</strong><strong style="font-size: 12px;">_vti_pvt and&nbsp;</strong><strong style="font-size: 12px;">_vti_bin/spsdisco.aspx</strong></span></span></p>
<p><strong>Description:</strong></p>
<p>&nbsp;If your SharePoint application is anonymously accessible then it's recommended to consider implementing authorization rule to restrict access to web services , or resources under _vti_bin, _vti_pvt , /_vti_bin/spsdisco.aspx&nbsp;...<br /> to&nbsp;at least prevent attacker from accessing these resources to gain information like SharePoint version or FrontPage configuration information ... etc</p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;Add this setting to web.config</p>
<pre>&lt;location path="_vti_inf.html"&gt;<br /> &lt;system.web&gt;<br />  &lt;authorization&gt;<br />   &lt;deny users="?" /&gt;<br />   &lt;allow users="*" /&gt;<br />  &lt;/authorization&gt;<br /> &lt;/system.web&gt;<br />&lt;/location&gt;<br />&lt;location path="_vti_pvt"&gt;<br /> &lt;system.web&gt;<br />  &lt;authorization&gt;<br />   &lt;deny users="?" /&gt;<br />   &lt;allow users="*" /&gt;<br />  &lt;/authorization&gt;<br /> &lt;/system.web&gt;<br />&lt;/location&gt;<br />&lt;location path="_vti_bin"&gt;<br /> &lt;system.web&gt;<br />  &lt;authorization&gt;<br />   &lt;deny users="?" /&gt;<br />   &lt;allow users="*" /&gt;<br />  &lt;/authorization&gt;<br /> &lt;/system.web&gt;<br />&lt;/location&gt;</pre>
<p><strong>&nbsp;References</strong>:</p>
<p>&nbsp;<a title="http://thuansoldier.net/?p=4267" href="http://thuansoldier.net/?p=4267">http://thuansoldier.net/?p=4267</a></p>
<p>&nbsp;<a title="http://thuansoldier.net/?p=4298" href="http://thuansoldier.net/?p=4298">http://thuansoldier.net/?p=4298</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>12</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Clickjacking</strong></span></p>
<p>&nbsp;<strong>Description:</strong></p>
<p>&nbsp;It&rsquo;s recommended to prevent clickjacking risk on your website and you can find more details about it in this article - Clickjacking in OWASP <a title="https://www.owasp.org/index.php/Clickjacking" href="https://www.owasp.org/index.php/Clickjacking">https://www.owasp.org/index.php/Clickjacking</a></p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;The easiest fix for this risk to add this header <strong>X-Frame-Options</strong>&nbsp;to HTTP Response but remember this way is not supported in all browsers.</p>
<p><span>&nbsp;Configure IIS to add an X-Frame-Options header to all responses for a given site, follow these steps:</span></p>
<ol class="sbody-num_list">
<li>Open Internet Information Services (IIS) Manager.</li>
<li>In the Connections pane on the left side, expand the&nbsp;<span class="text-base">Sites&nbsp;</span>folder and select the site that you want to protect.</li>
<li>Double-click the&nbsp;<span class="text-base">HTTP Response Headers</span>&nbsp;icon in the feature list in the middle.</li>
<li>In the Actions pane on the right side, click&nbsp;<span class="text-base">Add</span>.</li>
<li>In the dialog box that appears, type&nbsp;<span class="text-base">X-Frame-Options</span>&nbsp;in the&nbsp;<span class="text-base">Name&nbsp;</span>field and&nbsp;type&nbsp;<span class="text-base">SAMEORIGIN</span>&nbsp;in the&nbsp;<span class="text-base">Value&nbsp;</span>field.</li>
<li>Click&nbsp;<span class="text-base">OK&nbsp;</span>to save your changes.</li>
</ol>
<div>&nbsp;Note: By default SharePoint 2013 configured with this header</div>
<p><strong>&nbsp;References</strong>:</p>
<p>&nbsp;<a title="http://www.c-sharpcorner.com/uploadfile/Roji.Joy/how-to-secure-external-anonymous-access-to-sharepoint-2010-sites" href="http://www.c-sharpcorner.com/uploadfile/Roji.Joy/how-to-secure-external-anonymous-access-to-sharepoint-2010-sites">http://blog.kotowicz.net/2009/12/5-ways-to-prevent-clickjacking-on-your.html</a></p>
<p>&nbsp;<a title="https://www.owasp.org/index.php/Clickjacking" href="https://www.owasp.org/index.php/Clickjacking">https://www.owasp.org/index.php/Clickjacking</a>&nbsp;</p>
<p>&nbsp;<a title="https://support.microsoft.com/en-us/kb/2694329" href="https://support.microsoft.com/en-us/kb/2694329">https://support.microsoft.com/en-us/kb/2694329</a></p>
<p><a title="http://styledpoint.com/blog/including-sharepoint-2013-in-an-iframe-without-x-frame-options-error/ " href="http://styledpoint.com/blog/including-sharepoint-2013-in-an-iframe-without-x-frame-options-error/">&nbsp;http://styledpoint.com/blog/including-sharepoint-2013-in-an-iframe-without-x-frame-options-error/&nbsp;</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>13</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;ASP.NET Security Vulnerability</strong>&nbsp;</span></p>
<p><strong>&nbsp;Description:</strong></p>
<p>&nbsp;Any security vulnerabilities apply to Asp.net, it will be applied to SharePoint because SharePoint built on top of Asp.Net technologies.</p>
<p>&nbsp;The below are the Common security vulnerabilities:</p>
<p><strong>&nbsp;Padding oracle vulnerability</strong>: (Asp.Net v1.0 to v3.5), most probably this vulnerability exists in non-patched SharePoint 2010 and older version. To know about this vulnerability you can check <a href="http://weblogs.asp.net/scottgu/important-asp-net-security-vulnerability">http://weblogs.asp.net/scottgu/important-asp-net-security-vulnerability</a> or <a href="http://www.troyhunt.com/2010/09/fear-uncertainty-and-and-padding-oracle.html">http://www.troyhunt.com/2010/09/fear-uncertainty-and-and-padding-oracle.html</a></p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;Update your SharePoint with the latest new version of CU to address this and other issues or you can install the direct fix <a href="https://technet.microsoft.com/library/security/ms10-070">https://technet.microsoft.com/library/security/ms10-070</a></p>
<p><strong>&nbsp;Hash DoS <strong>vulnerability</strong>: </strong>(resolved with the release of .NET 4.5)<strong></strong></p>
<p>&nbsp;Allows an attacker to make a POST request with a very large number of parameters constructed to cause hash collisions when parsed by ASP.NET. To know about this vulnerability you can check <a href="http://www.troyhunt.com/2011/12/has-hash-dos-patch-been-installed-on.html">http://www.troyhunt.com/2011/12/has-hash-dos-patch-been-installed-on.html</a></p>
<p><strong>&nbsp;Fix:</strong></p>
<p>&nbsp;Update your SharePoint with the latest&nbsp;new version of CU to address this and other issues or you can install the direct fix <a href="https://technet.microsoft.com/library/security/ms11-100">https://technet.microsoft.com/library/security/ms11-100</a></p>
<p><strong>&nbsp;Note:</strong> you can test your SharePoint site if it has the above vulnerabilities using the following link <a href="https://asafaweb.com/">https://asafaweb.com</a> (I recommended you to use this site for testing and also read all things written by the owner of this site Mr.Troy Hunt <a href="http://troyhunt.com/">http://troyhunt.com</a>)</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>14</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong><strong>&nbsp;Validation Request</strong></strong>&nbsp;</span><br /><strong>&nbsp;Description:</strong></p>
<p>&nbsp;Request validation, a feature of ASP.NET since version 1.1, prevents the server from accepting content containing un-encoded HTML. This feature is designed to help prevent some script-injection attacks whereby client script code or HTML can be unknowingly submitted to a server, stored, and then presented to other users.</p>
<p><strong>&nbsp;Fix:</strong>&nbsp;</p>
<p>&nbsp;SharePoint like other .NET content management systems which has a lot of places where rich text needs to be submitted to the server so By default Microsoft disable ValidateRequest in web.config and if you try to enable it then you will not able to create pages with Html editors contents.In this case you need to accept the risk and keep this feature disable but take care for your SharePoint and make sure it's patched with up to date fixes and In case you have custom code , make sure to validate and encode the input at the client and server sides using libraries like AntiXSS and others.</p>
<p><strong>&nbsp;References:</strong></p>
<p>&nbsp;<a title="https://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx" href="https://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx">https://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx</a></p>
<p>&nbsp;<a title="http://www.asp.net/whitepapers/request-validation" href="http://www.asp.net/whitepapers/request-validation">http://www.asp.net/whitepapers/request-validation</a></p>
<p>&nbsp;<a title="http://www.troyhunt.com/2010/03/request-validation-dotnetnuke-and.html" href="http://www.troyhunt.com/2010/03/request-validation-dotnetnuke-and.html">http://www.troyhunt.com/2010/03/request-validation-dotnetnuke-and.html</a></p>
<p>&nbsp;h<a title="ttps://www.nuget.org/packages/AntiXss/" href="ttps://www.nuget.org/packages/AntiXss/">ttps://www.nuget.org/packages/AntiXss/</a></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>15</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Critical Security Updates</strong></span></p>
<p><strong>Description:</strong></p>
<p>&nbsp;SharePoint is prone to exploitation since new threats are discovered so there is a need to fix the vulnerabilities and security problems.</p>
<p>&nbsp;SharePoint patches can be in three form:</p>
<ol>
<li>Service Pack: include previous and new fixes and also may has new features</li>
<li>Cumulative Update(CU): include fixes that have been reported by customer in context of support cases(monthly release)</li>
<li>Hot fix , Public Update or Quick Fix engineering(QFE):include security fixes or fixes for problems affected by a certain customers</li>
</ol>
<p>&nbsp;Patching process needs to be planned and it will cause to bring your farm down so it's recommended to have DR farm and also consider the below best practices when patching your SharePoint farm:</p>
<ul>
<li>Stop Automatic Window Update in SharePoint and SQL Servers</li>
<li>Check updates and fixes from this site <a href="http://blogs.technet.com/b/stefan_gossner/">http://blogs.technet.com/b/stefan_gossner/</a>&nbsp;and&nbsp;<br />https://technet.microsoft.com/library/dn789211(v=office.14)</li>
<li>Check for SharePoint Build version from these sites
<ul>
<li>SharePoint 2010 <a href="http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=224">http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=224</a></li>
<li>SharePoint 2013 <a href="http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=346">http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=346</a></li>
</ul>
</li>
<li>Check this blog which provide good articles in patching <a href="http://blogs.msdn.com/b/sambetts/archive/tags/patching/">http://blogs.msdn.com/b/sambetts/archive/tags/patching/</a></li>
<li>Check SharePoint version using PowerShell: (Get-SPFarm).BuildVersion</li>
<li>Notify your users because it will cause the SharePoint to be down</li>
<li>Test the patching in testing Farm before go live (consider using the Virtual machine and no need to be identical farm as the production servers)</li>
<li>Documentation for SharePoint Farm and Rollback</li>
<ul>
<li>you can use this power shell <a title="https://gallery.technet.microsoft.com/office/Inventory-SharePoint-Farm-dc11fc28/view/Discussions" href="https://gallery.technet.microsoft.com/office/Inventory-SharePoint-Farm-dc11fc28/view/Discussions">https://gallery.technet.microsoft.com/office/Inventory-SharePoint-Farm-dc11fc28/view/Discussions</a>&nbsp;or others in CodePlex site to document your SharePoint farm</li>
</ul>
<li>Identify the maintenance time</li>
<li>Test the farm after patching process</li>
<li>Monitor it</li>
</ul>
</td>
</tr>
<tr>
<td style="text-align: center;"><strong>16</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Max Upload Document / Max Request length</strong></span>&nbsp;</p>
<p><strong>&nbsp;Description:</strong></p>
<p>&nbsp;It's recommended to decrease the amount in these settings "Maximum Upload Size" and "maxRequestLength" to limit the impacts of the load, response time and data capacity in the server especially in case of DoS attacks.</p>
<p><strong>&nbsp;Fix:</strong></p>
<p><span class="Apple-tab-span" style="white-space: pre;"> &nbsp;</span>Y<span class="Apple-tab-span" style="white-space: pre;">ou can follow steps in the following link<a title=" https://support.microsoft.com/en-us/kb/925083" href="https://support.microsoft.com/en-us/kb/925083"> https://support.microsoft.com/en-us/kb/925083</a>&nbsp;</span>and make sure these values meet your business requirements.</p>
<p><strong>&nbsp;References</strong>:</p>
<p>&nbsp;<a title="https://technet.microsoft.com/en-us/library/ee424404(office.14).aspx#Section3c" href="https://technet.microsoft.com/en-us/library/ee424404(office.14).aspx#Section3c">https://technet.microsoft.com/en-us/library/ee424404(office.14).aspx#Section3c</a></p>
</td>
</tr>
<tr>
<td>&nbsp;<strong>17</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Search Misconfiguration</strong></span></p>
<p>&nbsp;<strong>Description:</strong></p>
<p><strong>&nbsp;Exclude Allitems.aspx</strong></p>
<p>&nbsp;Some contents&nbsp;like http://*allitems.aspx <span>should not be accessed by a public user in the SharePoint search result</span></p>
<p>&nbsp;<strong>Fix:</strong></p>
<p>&nbsp;We can create <strong>Crawl Rules</strong> to hide them from search result and It's recommended to create the following crawl rules:</p>
<p>&nbsp;http://*allitems.aspx</p>
<p>&nbsp;http://*editform.aspx</p>
<p>&nbsp;http://*dispform.aspx</p>
<p>&nbsp;http://*my-sub.aspx</p>
<p>&nbsp;http://*mod-view.aspx</p>
<p>&nbsp;http://*itemsonhomepage.aspx</p>
<p>&nbsp;http://*thumbnails.aspx</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/8686.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/8686.01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/8686.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/8686.01.png" alt="" border="0" /></a>&nbsp;</p>
<p>&nbsp;<strong>References:</strong></p>
<p>&nbsp;<a title="https://technet.microsoft.com/en-us/library/jj219686.aspx" href="https://technet.microsoft.com/en-us/library/jj219686.aspx">https://technet.microsoft.com/en-us/library/jj219686.aspx</a></p>
<p>&nbsp;<strong>Default content access account</strong></p>
<p>&nbsp;This account that the SharePoint Search service uses by default for crawling the contents. Avoid Grant this service account Full Control.</p>
<p>&nbsp;<strong>Fix:</strong></p>
<p>&nbsp;<span>This service account needs full read access to each web application. Under <strong>"User Policy"</strong> of a Web application , make sure this account only has <strong>"Full Read"</strong> permission.</span></p>
<p><span>&nbsp;<strong>References:</strong></span></p>
<p>&nbsp;<a title="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/10/19/how-to-properly-set-permissions-on-your-search-crawl-account-in-sharepoint-2010.aspx" href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/10/19/how-to-properly-set-permissions-on-your-search-crawl-account-in-sharepoint-2010.aspx<strong></strong>">http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/10/19/how-to-properly-set-permissions-on-your-search-crawl-account-in-sharepoint-2010.aspx</a></p>
</td>
</tr>
<tr>
<td><strong>18</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';"><strong>&nbsp;Persistent XSS flaw in SharePoint 2013</strong></span></p>
<p><strong>&nbsp;Description:</strong></p>
<p><span class="Apple-tab-span" style="white-space: pre;"> This particular vulnerability, CVE-2015-2522, is caused by insufficiently sanitizing user-supplied<br /> input in a number of input points like notes, keywords, and comments.<br /></span>&nbsp;For more details you can check this link<br />&nbsp;<a title="http://blog.fortinet.com/post/sharepoint-2013-xss-vulnerability-discovered" href="http://blog.fortinet.com/post/sharepoint-2013-xss-vulnerability-discovered">http://blog.fortinet.com/post/sharepoint-2013-xss-vulnerability-discovered</a></p>
<p>&nbsp;<strong>Fix:</strong></p>
<p>&nbsp;Update your SharePoint with the latest&nbsp;new version of CU to address this and other issues.</p>
<p>&nbsp;Note: Only&nbsp;<span>SharePoint 2013 with version build&nbsp;<strong>15.0.4571.1502</strong> and before should update as soon as possible.</span></p>
</td>
</tr>
<tr>
<td><strong>&nbsp;19</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';">&nbsp;Disable loopback check</span></p>
<p>&nbsp;<strong>Description:</strong></p>
<p>&nbsp;The feature prevents access to a web application using a fully qualified domain name (FQDN) if an attempt to access it takes place from a machine that hosts that application. The end result is a 401.1 Access Denied from the web server and a logon failure in the event log.People go around this issue by wrong way (even me) because Microsoft consider this as<span>&nbsp;a security feature</span>.</p>
<p>&nbsp;<strong>Fix:</strong></p>
<p>&nbsp;Don't use "<strong>DisableLoopbackCheck</strong>" and instead of that fix it using the following registry key "<strong>BackConnectionHostNames</strong>". You can follow the steps in this post <a title="https://support.microsoft.com/en-us/kb/896861" href="https://support.microsoft.com/en-us/kb/896861">https://support.microsoft.com/en-us/kb/896861</a>&nbsp;<strong>[First Method]</strong></p>
<p><strong>Note:</strong> You can go with "DisableLoopbackCheck" option in the development and testing servers.</p>
<p><strong>&nbsp;<strong>References:</strong></strong></p>
<p>&nbsp;<a title="http://www.harbar.net/archive/2009/07/02/disableloopbackcheck-amp-sharepoint-what-every-admin-and-developer-should-know.aspx" href="http://www.harbar.net/archive/2009/07/02/disableloopbackcheck-amp-sharepoint-what-every-admin-and-developer-should-know.aspx<strong><strong></strong></strong>">http://www.harbar.net/archive/2009/07/02/disableloopbackcheck-amp-sharepoint-what-every-admin-and-developer-should-know.aspx</a></p>
<p>&nbsp;<a title="http://blogs.technet.com/b/sharepoint_foxhole/archive/2010/06/21/disableloopbackcheck-lets-do-it-the-right-way.aspx" href="http://blogs.technet.com/b/sharepoint_foxhole/archive/2010/06/21/disableloopbackcheck-lets-do-it-the-right-way.aspx">http://blogs.technet.com/b/sharepoint_foxhole/archive/2010/06/21/disableloopbackcheck-lets-do-it-the-right-way.aspx</a></p>
</td>
</tr>
<tr>
<td><strong>&nbsp;20</strong></td>
<td>
<p><span style="font-family: 'arial black', 'avant garde';">&nbsp;Health Check(Security)</span></p>
<p>&nbsp;<strong>Description:</strong></p>
<pre><span style="font-family: arial, helvetica, sans-serif;">SharePoint Health Analyzer is a feature that enables administrators to schedule regular, automatic </span><br /><span style="font-family: arial, helvetica, sans-serif;">checks for potential configuration, performance, and usage problems in the server farm. </span><br /><span style="font-family: arial, helvetica, sans-serif;">SharePoint has four Health check rules related to Security as following:</span></pre>
<ol>
<li>Accounts used by application pools or service identities are in the local machine Administrators group.</li>
<li>Business Data Connectivity connectors are currently enabled in a partitioned environment.</li>
<li>Web Applications using Claims authentication require an update.</li>
<li>The server farm account should not be used for other services.</li>
</ol>
<p>&nbsp;<strong>Fix:</strong></p>
<p>&nbsp;Most of the below rules are best practices so fix these issues which has detected&nbsp;by the SharePoint Health Analyzer and in case you want to ignore them then make sure to have a good reason.</p>
<ol>
<li>Fix for Point 1&nbsp;<a title="https://technet.microsoft.com/en-us/library/hh344224.aspx" href="https://technet.microsoft.com/en-us/library/hh344224.aspx">https://technet.microsoft.com/en-us/library/hh344224.aspx</a></li>
<li>Fix for Point 2&nbsp;<a title="https://technet.microsoft.com/en-us/library/jj891123.aspx" href="https://technet.microsoft.com/en-us/library/jj891123.aspx">https://technet.microsoft.com/en-us/library/jj891123.aspx</a></li>
<li>Fix for Point&nbsp;3&nbsp;<a title="https://technet.microsoft.com/en-us/library/ff686815.aspx" href="https://technet.microsoft.com/en-us/library/ff686815.aspx">https://technet.microsoft.com/en-us/library/ff686815.aspx</a></li>
<li>Fix for Point 4&nbsp;<a title="https://technet.microsoft.com/en-us/library/ff805056(v=office.14).aspx" href="https://technet.microsoft.com/en-us/library/ff805056(v=office.14).aspx">https://technet.microsoft.com/en-us/library/ff805056(v=office.14).aspx</a></li>
</ol>
<div>&nbsp;<strong>References:</strong></div>
<div>&nbsp;<a title="https://technet.microsoft.com/en-us/library/ff686816.aspx" href="https://technet.microsoft.com/en-us/library/ff686816.aspx">https://technet.microsoft.com/en-us/library/ff686816.aspx</a></div>
</td>
</tr>
<tr>
<td>&nbsp;<strong>21</strong></td>
<td><span style="font-family: 'arial black', 'avant garde';">&nbsp;DR +&nbsp;Documentation</span>
<p>&nbsp;<strong>Description:</strong></p>
<p>&nbsp;<strong>Fix:</strong></p>
</td>
</tr>
<tr>
<td>&nbsp;<strong>22</strong></td>
<td>
<p>&nbsp;<span style="font-family: 'arial black', 'avant garde';"><strong>The server farm account should not be used for other services.</strong></span></p>
<p><strong>&nbsp;Description:</strong></p>
<p>&nbsp;The account used for the SharePoint timer service and the central administration site, is highly <br />&nbsp;privileged and should not be used for any other services on any machines in the server farm.</p>
<p>&nbsp;In SharePoint Health Analyzer you could find similar warning like&nbsp;Accounts used by application<br /> pools or service identities are in the local machine Administrators group or others warnings and<br /> all related to inappropriate setup service accounts.&nbsp;</p>
<p>&nbsp;<strong>Fix:</strong></p>
<p><strong></strong>&nbsp;To install SharePoint ,you have to have appropriate administrative and service accounts on servers running SharePoint and SQL Server.</p>
<p>&nbsp;Plan for administrative and service accounts in SharePoint 2013&nbsp;<a title="https://technet.microsoft.com/en-us/library/cc263445.aspx" href="https://technet.microsoft.com/en-us/library/cc263445.aspx">https://technet.microsoft.com/en-us/library/cc263445.aspx</a>&nbsp;</p>
<p>&nbsp;<strong>References:</strong></p>
<p>&nbsp;<a title="https://technet.microsoft.com/en-us/library/cc678863.aspx" href="https://technet.microsoft.com/en-us/library/cc678863.aspx">https://technet.microsoft.com/en-us/library/cc678863.aspx</a>&nbsp;</p>
<p>&nbsp;<a title="https://technet.microsoft.com/EN-US/library/hh377944.aspx" href="https://technet.microsoft.com/EN-US/library/hh377944.aspx">https://technet.microsoft.com/EN-US/library/hh377944.aspx</a></p>
</td>
</tr>
<tr>
<td>&nbsp;<strong>23</strong></td>
<td>
<p>&nbsp;&nbsp;<span style="font-family: 'arial black', 'avant garde';">TCP/IP Ports of SharePoint 2013</span></p>
<p><strong><span style="font-family: 'andale mono', times;">&nbsp;Description:</span></strong></p>
<p>&nbsp;Learn about security hardening for SharePoint web server, application server, and database server roles,including specific hardening requirements for ports, protocols, and services.</p>
<p>&nbsp;<strong>References:</strong></p>
<p><span>&nbsp;<a title="https://technet.microsoft.com/en-us/library/cc262849.aspx#PortProtocolService" href="https://technet.microsoft.com/en-us/library/cc262849.aspx#PortProtocolService">https://technet.microsoft.com/en-us/library/cc262849.aspx#PortProtocolService</a></span></p>
<p>&nbsp;<a title="http://blog.blksthl.com/2013/02/21/tcpip-ports-of-sharepoint-2013/" href="http://blog.blksthl.com/2013/02/21/tcpip-ports-of-sharepoint-2013/">http://blog.blksthl.com/2013/02/21/tcpip-ports-of-sharepoint-2013/</a><span><strong><span style="font-family: 'andale mono', times;">&nbsp;</span></strong></span></p>
</td>
</tr>
<tr>
<td>&nbsp;<strong>24</strong></td>
<td>
<p>&nbsp;<span style="font-family: 'arial black', 'avant garde';">Require Use Remote Interfaces permission</span></p>
<p>&nbsp;<strong>Description:</strong></p>
<p>&nbsp;It's recommended to prevent Anonymous user from accessing Client Object Model interfaces. When this option is checked, it simply means that the user must possess the Use Remote Interfaces permission which allows&nbsp;access to SOAP, Web DAV and Client Object Model.</p>
<p>&nbsp;Note:By default this option is checked in SharePoint 2013&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4544.Untitled.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4544.Untitled.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/4544.Untitled.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/4544.Untitled.png" alt="" border="0" /></a></p>
<p>&nbsp;<strong>References:</strong></p>
<p>&nbsp;<a title="http://blogs.msdn.com/b/kaevans/archive/2013/10/24/what-every-developer-needs-to-know-about-sharepoint-apps-csom-and-anonymous-publishing-sites.aspx" href="http://blogs.msdn.com/b/kaevans/archive/2013/10/24/what-every-developer-needs-to-know-about-sharepoint-apps-csom-and-anonymous-publishing-sites.aspx">http://blogs.msdn.com/b/kaevans/archive/2013/10/24/what-every-developer-needs-to-know-about-sharepoint-apps-csom-and-anonymous-publishing-sites.aspx</a></p>
</td>
</tr>
<tr>
<td>&nbsp;<strong>25</strong></td>
<td>
<p>&nbsp;<span style="font-family: 'arial black', 'avant garde';">Enable Client Integration?</span></p>
<p>&nbsp;<strong>Description:</strong></p>
<p>&nbsp;It's recommended to disable Client integration in case of anonymous site but it will effectively block SharePoint from being a useful collaboration tool, and block all Office client interaction with SharePoint and also prevent you to work with SharePoint Designer and using Windows Explorer View.&nbsp;</p>
<p>&nbsp;Note: Don't go with this option except you evaluate the client business requirements and you extend the SharePoint site to work with SharePoint Designer and other client features.</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/3005.Untitled.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/3005.Untitled.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/3005.Untitled.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/3005.Untitled.png" alt="" border="0" /></a>&nbsp;<strong>References:</strong></p>
<p>&nbsp;<a title="https://support.microsoft.com/en-us/kb/2758444" href="https://support.microsoft.com/en-us/kb/2758444">https://support.microsoft.com/en-us/kb/2758444</a>&nbsp;</p>
<p>&nbsp;<a title="https://support.microsoft.com/en-us/kb/981223" href="https://support.microsoft.com/en-us/kb/981223">https://support.microsoft.com/en-us/kb/981223</a></p>
</td>
</tr>
<tr>
<td>&nbsp;...</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<pre>&nbsp;</pre>
<pre><span style="font-size: small; font-family: 'arial black', 'avant garde';"><strong>Notes:</strong></span></pre>
<ul>
<li><span style="font-size: small;">Please test these changes before go live.</span></li>
<li><span style="font-size: small;">I will be happy with your feedback because your feedback is very important ,if you have comments or new points please send it to me @ fabdulwahab@outlook.com or Tweet me @ </span><a style="font-size: small;" title="https://twitter.com/fadi_abdulwahab" href="https://twitter.com/fadi_abdulwahab">https://twitter.com/fadi_abdulwahab</a><span style="font-size: small;"> .</span></li>
</ul>
<pre>&nbsp;</pre>
<pre><span style="font-size: small; font-family: 'arial black', 'avant garde';"><strong>Change Logs:</strong></span></pre>
<ol>
<li><span style="font-size: small;">Published with 12 points.[15/8/2015]</span></li>
<li><span style="font-size: small;">Added "Critical Security Updates" and "ASP.NET Security Vulnerability". [11/9/2015]</span></li>
<li><span style="font-size: small;">Added "Persistent XSS flaw in SharePoint 2013". [17/9/2015]</span></li>
<li>Added <span style="font-family: arial, helvetica, sans-serif;">"Search Misconfiguration"</span> and <span style="font-family: arial, helvetica, sans-serif;">"Disable loopback check"</span>. [18/9/2015]</li>
<li>Added "Validation Request" ,"Health Check(Security)" and "Max Upload Document / Max Request length".[21/9/2015]</li>
<li>Updated "Insufficient Transport Layer Protection" to disable Old Protocols , weak ciphers and&nbsp;Poodle attack protection.[29/11/2015]</li>
<li>Added "The server farm account should not be used for other services" and "&nbsp;<span>TCP/IP Ports of SharePoint 2013"</span>.[1/12/2015]</li>
<li>Added "<span>Require Use Remote Interfaces permission" and "<span>Enable Client Integration?".[3/12/2015]</span></span></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>(ISC)2 - CSSLP® - Certified Secure Software Lifecycle Professional - July 2015</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/isc2-csslp-certified-secure-software-lifecycle-professional-july-2015</link>
      <pubDate>Tue, 21 Jul 2015 08:08:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2015/07/21/isc2-csslp-certified-secure-software-lifecycle-professional-july-2015/</guid>
      <description><![CDATA[&nbsp;
Certificate/ID Number: 529687
Cycle Start Date: Aug 01, 2015
Cycle End Date: Jul 31,...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/7041.CSSLP-logo-2lines.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/7041.CSSLP_2D00_logo_2D00_2lines.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/7041.CSSLP-logo-2lines.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/7041.CSSLP_2D00_logo_2D00_2lines.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>Certificate/ID Number:<strong> 529687</strong></p>
<p>Cycle Start Date: Aug 01, 2015</p>
<p>Cycle End Date: Jul 31, 2018</p>
<p>&nbsp;</p>
<p>Dear<strong> Fadi Abdulwahab</strong>,</p>
<p>&nbsp;</p>
<p><strong>Congratulations</strong>! It gives me great pleasure to be the first to address you with the <strong>Certified Secure Software Lifecycle Professional (CSSLP&reg;)</strong> designation! Based upon your examination results, a review of your application and acceptance of your endorsement, the (ISC)2 Board of Directors awards you with the CSSLP Certification. You may use the CSSLP designation and logo from this day forward, subject to the (ISC)2 Logo Guidelines (www.isc2.org/logo-usage) (login required).</p>
<p>Your ID card and certificate will be shipped to the address above within eight weeks. Please note in some geographical locations, certificate delivery can take up to 12 weeks.</p>
<p>You may not claim CPE credits for activities that occurred prior to your certification cycle start date.</p>
<p>(ISC)2 sends invoices and important certification renewal news, in addition to other official communications, exclusively via EMAIL. Please ensure your email address is always kept up-to-date in your profile.</p>
<p>Additional information regarding certification maintenance requirements, member benefits, CPE opportunities, etc. will be sent to you in the upcoming months. You can always log into your member account at www.isc2.org or contact us at ... for this information.</p>
<p>Again, congratulations on becoming a CSSLP! You can be proud of your achievement; you are part of an elite network of professionals recognized around the world.</p>
<p>We're pleased to have you as a member and look forward to supporting you.</p>
<p>Best Regards,</p>
<p>On behalf of the (ISC)2 Board of Directors,</p>
<p>Professor Corey Schou, Ph.D., CSSLP, Fellow of (ISC)&sup2;</p>
<p>For more details : <a title="https://www.isc2.org/csslp/default.aspx" href="https://www.isc2.org/csslp/default.aspx">https://www.isc2.org/csslp/default.aspx</a>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/2555.0004.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/2555.0004.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/2555.0004.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/2555.0004.png" alt="" border="0" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Move SharePoint 2010 Site Collection from one farm to another with RBS is enabled on the source Site collection</title>
      <link>https://docs.microsoft.com/archive/blogs/fabdulwahab/move-sharepoint-2010-site-collection-from-one-farm-to-another-with-rbs-is-enabled-on-the-source-site-collection</link>
      <pubDate>Wed, 18 Jun 2014 04:07:00 GMT</pubDate>
      <dc:creator><![CDATA[fabdulwahab@outlook.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fabdulwahab/2014/06/18/move-sharepoint-2010-site-collection-from-one-farm-to-another-with-rbs-is-enabled-on-the-source-site-collection/</guid>
      <description><![CDATA[Note: to configure RBS for SharePoint 2010 then you can check this document &ldquo;Configuring...]]></description>
      <content:encoded><![CDATA[<p><strong>Note</strong>: to configure <strong>RBS</strong> for SharePoint 2010 then you can check this document <strong>&ldquo;Configuring Remote Blob Storage (RBS) for SharePoint&rdquo;<br /><a href="http://www.knowledgecue.com/pdf/ConfiguringRemoteBlobStorageforSharePointKnowledgeCue.pdf">http://www.knowledgecue.com/pdf/ConfiguringRemoteBlobStorageforSharePointKnowledgeCue.pdf</a></strong></p>
<p>I have a case to move Site Collection from one farm to another farm but the source site collection is enabled with RBS feature so I will follow the below <strong>Steps</strong>:</p>
<ol>
<li><span style="font-size: 12px;">Take Normal Full Backup for the Content Database [Source Site Collection] from SQL Server Management Studio or T-SQL</span></li>
<ol>
<li><span style="font-size: 12px;">SQL Server will include File stream objects with this backup</span></li>
<li><span style="font-size: 12px;">File stream objects will restored to the same Database Folder</span></li>
</ol>
<li><span style="font-size: 12px;">Enable </span><strong style="font-size: 12px;">FILESTREAM</strong><span style="font-size: 12px;"> on the destination SQL Server [ In my case SQL 2008 Server R2 ]</span></li>
<ol>
<li><span style="font-size: 12px;">If you restored the database in destination SQL Server before enabling FILESTREAM then you will get this error<br /><br /></span><a style="font-size: 12px;" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/6811.1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/6811.1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/6811.1.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/6811.1.png" alt="" border="0" /></a><span style="font-size: 12px;">&nbsp;</span></li>
</ol>
<li><span style="font-size: 12px;">To enable FILESTREAM</span></li>
<ol>
<li><span style="font-size: 12px;">Open SQL Server Configuration Manager</span></li>
<li><span style="font-size: 12px;">Right Click on SQL Server Service and select Properties<br /><br /></span><a style="font-size: 12px;" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/6763.2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/6763.2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/6763.2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/6763.2.png" alt="" border="0" /></a><span style="font-size: 12px;">&nbsp;<br />&nbsp;</span></li>
<li><span style="font-size: 12px;">Restart &nbsp;SQL Server Service</span></li>
<li>Run the following commands one by one<br /> EXEC sp_configure&nbsp; filestream_access_level, 2<br /> RECONFIGURE</li>
</ol>
<li>Restore Content Database Backup in SQL Server destination Server</li>
<ol>
<li><span style="font-size: 12px;">Don&rsquo;t forget to grant SharePoint farm user db_owner access to this database after restoring it</span></li>
</ol>
<li><span style="font-size: 12px;">Copy </span><strong style="font-size: 12px;">RBS.msi</strong><span style="font-size: 12px;"> setup file to SQL Server , for example under &nbsp;c:\ disk</span></li>
<li><span style="font-size: 12px;">Open CMD and go to C:\ path and then run the following Command [Change the highlighted text as your settings]&nbsp;<br /></span>msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="<strong>WSS_Content_DB</strong>" DBINSTANCE="<strong>DBInstanceName</strong>" FILESTREAMFILEGROUP=<strong>RBSFilestreamProvider</strong> FILESTREAMSTORENAME=FilestreamProvider_1<br />&nbsp;</li>
<li><span style="font-size: 12px;">You can check if you have installed the file successfully by opening </span><strong style="font-size: 12px;">rbs_install_log.txt</strong><span style="font-size: 12px;"> in the same disk where the RBS.msi setup exits, go to the end of file and check if you can find &ldquo;Product: SQL Server 2008 R2 Remote Blob Store -- Installation completed successfully&rdquo;</span></li>
<li>Mount Content Database using SharePoint Management Shell <br /> Mount-SPContentDatabase -Name WSS_Content_DB -WebApplication <a href="http://test/">http://test</a></li>
<li>Copy RBS.msi setup file to SharePoint <strong>Web Servers</strong> or Frontend Servers , for example under &nbsp;c:\ disk</li>
<li>Open CMD and go to C:\ path and then run the following Command [ Change the highlighted text ]<br /> msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME="<strong>WSS_Content_DB</strong>" DBINSTANCE="<strong> DBInstanceName</strong>" ADDLOCAL="Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServ</li>
<li>You can check if you have installed the file successfully by opening <strong>rbs_install_log.txt</strong> in the same disk where the RBS.msi setup exits, go to the end of file and check if you can find &ldquo;Product: SQL Server 2008 R2 Remote Blob Store -- Installation completed successfully&rdquo;</li>
<li>Open SharePoint Management Shell if the Site Collection is not enabled with RBS and run the below commands:<br /> $cdb = Get-SPContentDatabase WSS_Content_DB<br />$rbss = $cdb.RemoteBlobStorageSettings<br />$rbss.Installed()<br />$rbss.Enable()<br />$rbss.SetActiveProviderName($rbss.GetProviderNames()[0])<br />$rbss<br /><br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/2235.3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/2235.3.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/48/67/2235.3.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-48-67/2235.3.png" alt="" border="0" /></a></li>
</ol>
<p><span style="font-size: 12px;">Finally test the Site and try to upload new files to document library and then check FILESTREAM folder if there is any changes or records added by checking the created date.</span></p>]]></content:encoded>
    </item>
  </channel>
</rss>