|
Building Secure ASP.NET Application
Building secure distributed Web applications can be challenging. It usually involves integrating several different technologies and products - yet your complete application will only be as secure as its weakest link. This guide presents a practical, scenario-driven approach to designing and building security-enhanced ASP.NET applications for Microsoft
Windows 2000 and version 1.1 of the Microsoft .NET Framework. It focuses on the key elements of authentication, authorization, and secure communication within and across the tiers of distributed .NET Web applications.
This guide focuses on:
* Authentication - to identify the clients of your application
* Authorization - to provide access controls for those clients
* Secure communication - to help ensure that messages remain private and are not altered by unauthorized parties
Who should read this guide:
Middleware developers and architects who build or plan to build .NET Web applications using ASP.NET, XML Web Services, Enterprise Services (COM+), .NET Remoting, or Microsoft ADO.NET
About Patterns and Practices:
Patterns & Practices contain specific recommendations illustrating how to design, build, deploy, and operate architecturally sound solutions to challenging business and technical scenarios. The technical guidance is reviewed and approved by Microsoft engineering teams, consultants, and Product Support Services, and by partners and customers.
Note: Includes complete sample on the Web.
Contents:
Acknowledgements xxiii
Preface xxv
CHAPTER 1 Introduction 1
The Connected Landscape 1
The Foundations 2
Authentication 2
Authorization 2
Secure Communication 3
Tying the Technologies Together 3
Design Principles 4
Summary 6
CHAPTER 2 Security Model for ASP.NET Applications 7
.NET Web Applications 7
Logical Tiers 8
Physical Deployment Models 9
Implementation Technologies 10
Security Architecture 11
Security Across the Tiers 12
Authentication 13
Authorization 16
Gatekeepers and Gates 17
Introducing .NET Framework Security 20
Code Access Security 20
Principals and Identities 21
WindowsPrincipal and WindowsIdentity 23
GenericPrincipal and Associated Identity Objects 23
ASP.NET and HttpContext.User 24
Remoting and Web Services 24
Summary 25
CHAPTER 3 Authentication and Authorization Design 27
Designing an Authentication and Authorization Strategy 28
Identify Resources 28
Choose an Authorization Strategy 28
Choose the Identities Used for Resource Access 29
Consider Identity Flow 30
Choose an Authentication Approach 31
Decide How to Flow Identity 31
Authorization Approaches 32
Role Based Authorization 32
Resource Based Authorization 33
Resource Access Models 33
The Trusted Subsystem Model 33
The Impersonation / Delegation Model 35
Choosing a Resource Access Model 36
Flowing Identity 38
Application vs. Operating System Identity Flow 38
Impersonation and Delegation 38
Role-Based Authorization 40
.NET Roles 40
Enterprise Services (COM+) Roles 42
SQL Server User Defined Database Roles 42
SQL Server Application Roles 42
.NET Roles versus Enterprise Services (COM+) Roles 43
Using .NET Roles 44
Choosing an Authentication Mechanism 47
Internet Scenarios 49
Intranet / Extranet Scenarios 50
Authentication Mechanism Comparison 51
Summary 51
CHAPTER 4 Secure Communication 53
Know What to Secure 54
SSL/TLS 55
Using SSL 55
IPSec 56
Using IPSec 56
RPC Encryption 57
Using RPC Encryption 57
Point to Point Security 58
Browser to Web Server 58
Web Server to Remote Application Server 59
Application Server to Database Server 59
Choosing Between IPSec and SSL 61
Farming and Load Balancing 61
More Information 61
Summary 61
CHAPTER 5 Intranet Security 63
ASP.NET to SQL Server 64
Characteristics 64
Secure the Scenario 65
The Result 65
Security Configuration Steps 66
Analysis 68
Q&A 69
Related Scenarios 70
ASP.NET to Enterprise Services to SQL Server 71
Characteristics 72
Secure the Scenario 72
The Result 73
Security Configuration Steps 74
Analysis 76
Pitfalls 77
ASP.NET to Web Services to SQL Server 77
Characteristics 78
Secure the Scenario 78
The Result 79
Security Configuration Steps 79
Analysis 82
Pitfalls 84
Q&A 84
ASP.NET to Remoting to SQL Server 85
Characteristics 85
Secure the Scenario 85
The Result 86
Security Configuration Steps 87
Analysis 89
Pitfalls 90
Flowing the Original Caller to the Database 91
ASP.NET to SQL Server 92
ASP.NET to Enterprise Services to SQL Server 93
The Result 94
Analysis 98
Pitfalls 99
Summary 99
CHAPTER 6 Extranet Security 101
Exposing a Web Service 102
Characteristics 102
Secure the Scenario 103
The Result 103
Security Configuration Steps 104
Analysis 107
Pitfalls 108
Q&A 108
Exposing a Web Application 109
Scenario Characteristics 109
Secure the Scenario 110
The Result 111
Analysis 113
Pitfalls 115
Summary 115
CHAPTER 7 Internet Security 117
ASP.NET to SQL Server 118
Characteristics 118
Secure the Scenario 119
The Result 120
Security Configuration Steps 120
Analysis 122
Pitfalls 124
Related Scenarios 124
ASP.NET to Remote Enterprise Services to SQL Server 125
Characteristics 126
Secure the Scenario 127
The Result 128
Security Configuration Steps 128
Analysis 132
Pitfalls 133
Related Scenarios 133
Summary 134
CHAPTER 8 ASP.NET Security 135
ASP.NET Security Architecture 135
Gatekeepers 137
Authentication and Authorization Strategies 139
Available Authorization Options 140
Windows Authentication with Impersonation 141
Windows Authentication without Impersonation 143
Windows Authentication Using a Fixed Identity 145
Forms Authentication 145
Passport Authentication 147
Configuring Security 147
Configure IIS Settings 149
Configure ASP.NET Settings 149
Secure Resources 152
Secure Communication 155
Programming Security 155
An Authorization Pattern 156
Creating a Custom IPrincipal class 158
Windows Authentication 159
Forms Authentication 160
Development Steps for Forms Authentication 162
Forms Implementation Guidelines 165
Hosting Multiple Applications Using Forms Authentication 166
Cookieless Forms Authentication 166
Passport Authentication 167
Custom Authentication 168
Process Identity for ASP.NET 168
Use a Least Privileged Account 168
Avoid Running as SYSTEM 169
Using the Default ASPNET Account 169
Impersonation 172
Impersonation and Local Resources 172
Impersonation and Remote Resources 172
Impersonation and Threading 172
Accessing System Resources 173
Accessing the Event Log 173
Accessing the Registry 174
Accessing COM Objects 174
Apartment Model Objects 174
Accessing Network Resources 176
Using the ASP.NET Process Identity 176
Using a Serviced Component 177
Using the Anonymous Internet User Account 178
Using LogonUser and Impersonating a Specific Windows Identity 180
Using the Original Caller 180
Accessing Files on a UNC File Share 181
Accessing Non-Windows Network Resources 181
Secure Communication 182
Storing Secrets 182
Options for Storing Secrets in ASP.NET 184
Consider Storing Secrets in Files on Separate Logical Volumes 184
Securing Session and View State 185
Securing View State 185
Securing Cookies 185
Securing SQL Session State 185
Web Farm Considerations 188
Session State 188
DPAPI 188
Using Forms Authentication in a Web Farm 188
The Element 189
Summary 190
CHAPTER 9 Enterprise Services Security 193
Security Architecture 193
Gatekeepers and Gates 195
Use Server Applications for Increased Security 196
Security for Server and Library Applications 197
Code Access Security Requirements 197
Configuring Security 198
Configuring a Server Application 198
Configuring an ASP.NET Client Application 205
Configuring Impersonation Levels for an Enterprise Services Application 206
Programming Security 207
Programmatic Role-Based Security 207
Identifying Callers 208
Choosing a Process Identity 208
Avoid Running as the Interactive User 208
Use a Least-Privileged Custom Account 209
Accessing Network Resources 209
Using the Original Caller 210
Using the Current Process Identity 210
Using a Specific Service Account 211
Flowing the Original Caller 211
Calling CoImpersonateClient 212
RPC Encryption 213
More Information 213
Building Serviced Components 213
DLL Locking Problems 213
Versioning 214
QueryInterface Exceptions 215
DCOM and Firewalls 215
More Information 215
Calling Serviced Components from ASP.NET 216
Caller's Identity 216
Use Windows Authentication and Impersonation Within
the Web-based Application 216
Configure Authentication and Impersonation within Machine.config 216
Configuring Interface Proxies 216
Security Concepts 219
Enterprise Services (COM+) Roles and .NET Roles 220
Authentication 221
Impersonation 222
Summary 224
CHAPTER 10 Web Services Security 225
Web Service Security Model 225
Platform/Transport Level (Point-to-Point) Security 226
Application Level Security 227
Message Level (End-to-End) Security 227
Platform/Transport Security Architecture 229
Gatekeepers 230
Authentication and Authorization Strategies 231
Windows Authentication with Impersonation 231
Windows Authentication without Impersonation 233
Windows Authentication Using a Fixed Identity 235
Configuring Security 236
Configure IIS Settings 236
Configure ASP.NET Settings 237
Secure Resources 237
Disable HTTP-GET, HTTP-POST 237
Secure Communication 238
Passing Credentials for Authentication to Web Services 238
Specifying Client Credentials for Windows Authentication 239
Calling Web Services from Non-Windows Clients 241
Proxy Server Authentication 242
Flowing the Original Caller 242
Default Credentials with Kerberos Delegation 243
Explicit Credentials with Basic or Forms Authentication 245
Trusted Subsystem 248
Flowing the Caller's Identity 249
Configuration Steps 249
Accessing System Resources 250
Accessing Network Resources 250
Accessing COM Objects 251
More Information 251
Using Client Certificates with Web Services 251
Authenticating Web Browser Clients with Certificates 252
Using the Trusted Subsystem Model 252
Secure Communication 255
Transport Level Options 256
Message Level Options 256
Summary 256
CHAPTER 11 .NET Remoting Security 259
.NET Remoting Architecture 259
Remoting Sinks 260
Anatomy of a Request When Hosting in ASP.NET 262
ASP.NET and the HTTP Channel 263
.NET Remoting Gatekeepers 264
Authentication 265
Hosting in ASP.NET 265
Hosting in a Windows Service 266
Authorization 267
Using File Authorization 267
Authentication and Authorization Strategies 268
More Information 269
Accessing System Resources 269
Accessing Network Resources 270
Passing Credentials for Authentication to Remote Objects 270
Specifying Client Credentials 270
Flowing the Original Caller 273
Default Credentials with Kerberos Delegation 274
Explicit Credentials with Basic or Forms Authentication 276
Trusted Subsystem 280
Flowing the Caller's Identity 281
Choosing a Host 282
Configuration Steps 282
Secure Communication 284
Platform Level Options 284
Choosing a Host Process 285
Recommendation 285
Hosting in ASP.NET 285
Hosting in a Windows Service 286
Hosting in a Console Application 287
Remoting vs. Web Services 288
Summary 289
CHAPTER 12 Data Access Security 291
Introducing Data Access Security 291
SQL Server Gatekeepers 293
Trusted Subsystem vs. Impersonation/Delegation 293
Authentication 295
Windows Authentication 295
SQL Authentication 301
Authenticating Against Non-SQL Server Databases 303
Authorization 304
Using Multiple Database Roles 304
Secure Communication 305
The Options 306
Choosing an Approach 306
Connecting with Least Privilege 307
The Database Trusts the Application 307
The Database Trusts Different Roles 307
The Database Trusts the Original Caller 308
Creating a Least Privilege Database Account 308
Storing Database Connection Strings Securely 310
The Options 310
Using DPAPI 310
Using Web.config and Machine.config 314
Using UDL Files 314
Using Custom Text Files 316
Using the Registry 316
Using the COM+ Catalog 316
Authenticating Users against a Database 317
Store One-way Password Hashes (with Salt) 317
SQL Injection Attacks 319
Auditing 323
Process Identity for SQL Server 324
Summary 325
CHAPTER 13 Troubleshooting Security Issues 327
Process for Troubleshooting 327
Searching for Implementation Solutions 328
Troubleshooting Authentication Issues 329
IIS Authentication Issues 329
Using Windows Authentication 330
Using Forms Authentication 331
Kerberos Troubleshooting 331
Troubleshooting Authorization Issues 331
Check Windows ACLs 331
Check Identity 331
Check the Element 332
ASP.NET 333
Enable Tracing 333
Configuration Settings 333
Determining Identity 334
Determining Identity in a Web Page 334
Determining Identity in a Web service 336
Determining Identity in a Visual Basic 6 COM Object 336
.NET Remoting 337
More Information 337
SSL 338
More Information 338
IPSec 338
Auditing and Logging 339
Windows Security Logs 339
SQL Server Auditing 339
IIS Logging 340
Troubleshooting Tools 341
File Monitor (FileMon.exe) 341
Fusion Log Viewer (Fuslogvw.exe) 341
ISQL.exe 342
Windows Task Manager 342
Network Monitor (NetMon.exe) 343
Registry Monitor (regmon.exe) 343
WFetch.exe 343
Visual Studio .NET Tools 344
WebServiceStudio 344
Windows 2000 Resource Kit 344
Index of How Tos 345
ASP.NET 345
Authentication and Authorization 345
Cryptography 345
Enterprise Services Security 345
Web Services Security 346
Remoting Security 346
Secure Communication 346
How To: Create a Custom Account to Run ASP.NET 347
ASP.NET Worker Process Identity 347
Impersonating Fixed Identities 348
Notes 348
Summary 349
1. Create a New Local Account 349
2. Assign Minimum Privileges 349
3. Assign NTFS Permissions 350
4. Configure ASP.NET to Run Using the New Account 352
How To: Use Forms Authentication with Active Directory 353
Requirements 353
Summary 353
1. Create a Web Application with a Logon Page 354
2. Configure the Web Application for Forms Authentication 355
3. Develop LDAP Authentication Code to Look Up the User in Active Directory 356
4. Develop LDAP Group Retrieval Code to Look Up the User's Group Membership 357
5. Authenticate the User and Create a Forms Authentication Ticket 358
6. Implement an Authentication Request Handler to Construct a GenericPrincipal Object 360
7. Test the Application 362
How To: Use Forms Authentication with SQL Server 2000 363
Requirements 364
Summary 364
1. Create a Web Application with a Logon Page 364
2. Configure the Web Application for Forms Authentication 365
3. Develop Functions to Generate a Hash and Salt value 366
4. Create a User Account Database 367
5. Use ADO.NET to Store Account Details in the Database 368
6. Authenticate User Credentials Against the Database 369
7. Test the Application 371
Additional Resources 372
How To: Create GenericPrincipal Objects with Forms Authentication 373
Requirements 374
Summary 374
1. Create a Web Application with a Logon Page 374
2. Configure the Web Application for Forms Authentication 375
3. Generate an Authentication Ticket for Authenticated Users 375
4. Construct GenericPrincipal and FormsIdentity Objects 378
5. Test the Application 379
Additional Resources 380
How To: Implement Kerberos Delegation for Windows 2000 381
Notes 381
Requirements 382
Summary 382
1. Confirm that the Client Account is Configured for Delegation 382
2. Confirm that the Server Process Account is Trusted for Delegation 382
References 383
How To: Implement IPrincipal 385
Requirements 386
Summary 386
1. Create a Simple Web Application 386
2. Configure the Web Application for Forms Authentication 387
3. Generate an Authentication Ticket for Authenticated Users 388
4. Create a Class that Implements and Extends IPrincipal 390
5. Create the CustomPrincipal Object 391
5. Test the Application 393
Additional Resources 394
How To: Create a DPAPI Library 395
Notes 395
Requirements 396
Summary 396
1. Create a C# Class Library 396
2. Strong Name the Assembly (Optional) 402
References 403
How To: Use DPAPI (Machine Store) from ASP.NET 405
Notes 405
Requirements 406
Summary 406
1. Create an ASP.NET Client Web Application 406
2. Test the Application 408
3. Modify the Web Application to Read an Encrypted Connection String from Web.Config 409
References 410
How To: Use DPAPI (User Store) from ASP.NET with Enterprise Services 411
Notes 411
Why Use Enterprise Services? 412
Why Use a Windows Service? 413
Requirements 414
Summary 414
1. Create a Serviced Component that Provides Encrypt and Decrypt Methods 414
2. Call the Managed DPAPI Class Library 415
3. Create a Dummy Class that will Launch the Serviced Component 416
4. Create a Windows Account to Run the Enterprise Services Application and Windows Service 416
5. Configure, Strong Name, and Register the Serviced Component 417
6. Create a Windows Service Application that will Launch the Serviced Component 418
7. Install and Start the Windows Service Application 420
8. Write a Web Application to Test the Encryption and Decryption Routines 420
9. Modify the Web Application to Read an Encrypted Connection String from an Application Configuration File 423
References 424
How To: Create an Encryption Library 425
Requirements 425
Summary 425
1. Create a C# Class Library 426
2. Create a Console Test Application 433
References 434
How To: Store an Encrypted Connection String in the Registry 435
Notes 435
Requirements 435
Summary 436
1. Store the Encrypted Data in the Registry 436
2. Create an ASP.NET Web Application 439
References 440
How To: Use Role-based Security with Enterprise Services 441
Notes 441
Requirements 441
Summary 442
1. Create a C# Class Library Application to Host the Serviced Component 442
2. Create the Serviced Component 442
3. Configure the Serviced Component 443
4. Generate a Strong Name for the Assembly 444
5. Build the Assembly and Add it to the Global Assembly Cache 445
6. Manually Register the Serviced Component 445
7. Examine the Configured Application 445
8. Create a Test Client Application 446
How To: Call a Web Service Using Client Certificates from ASP.NET 449
Why Use a Serviced Component? 449
Why is a User Profile Required? 450
Requirements 451
Summary 451
1. Create a Simple Web Service 451
2. Configure the Web Service Virtual Directory to Require Client Certificates 452
3. Create a Custom Account for Running the Serviced Component 453
4. Request a Client Certificate for the Custom Account 453
5. Test the Client Certificate Using a Browser 455
6. Export the Client Certificate to a File 455
7. Develop the Serviced Component Used to Call the Web Service 456
8. Configure and Install the Serviced Component 459
9. Develop a Web Application to Call the Serviced Component 460
Additional Resources 462
How To: Call a Web Service Using SSL 463
Requirements 463
Summary 463
1. Create a Simple Web Service 464
2. Configure the Web Service Virtual Directory to Require SSL 464
3. Test the Web Service Using a Browser 465
4. Install the Certificate Authority's Certificate on the Client Computer 466
5. Develop a Web Application to Call the Web Service 467
Additional Resources 468
How To: Host a Remote Object in a Windows Service 469
Notes 469
Requirements 469
Summary 470
1. Create the Remote Object Class 470
2. Create a Windows Service Host Application 470
3. Create a Windows Account to Run the Service 473
4. Install the Windows Service 473
5. Create a Test Client Application 474
References 474
How To: Set Up SSL on a Web Server 475
Requirements 475
Summary 475
1. Generate a Certificate Request 475
2. Submit a Certificate Request 477
3. Issue the Certificate 478
4. Install the Certificate on the Web Server 478
5. Configure Resources to Require SSL Access 479
How To: Set Up Client Certificates 481
Requirements 481
Summary 481
1. Create a Simple Web Application 482
2. Configure the Web Application to Require Client Certificates 482
3. Request and Install a Client Certificate 483
4. Verify Client Certificate Operation 484
Additional Resources 484
How To: Use IPSec to Provide Secure Communication Between Two Servers 485
Notes 487
Requirements 487
Summary 488
1. Create an IP Filter 488
2. Create Filter Actions 489
3. Create Rules 490
4. Export the IPSec Policy to the Remote Computer 491
5. Assign Policies 491
6. Verify that it Works 492
Additional Resources 494
How To: Use SSL to Secure Communication with SQL Server 2000 495
Notes 495
Requirements 496
Summary 496
1. Install a Server Authentication Certificate 496
2. Verify that the Certificate Has Been Installed 497
3. Install the Issuing CA's Certificate on the Client 498
4. Force All Clients to Use SSL 498
5. Allow Clients to Determine Whether to Use SSL 499
6. Verify that Communication is Encrypted 500
Additional Resources 503
Base Configuration 505
Configuration Stores and Tools 507
Reference Hub 513
Searching the Knowledge Base 513
Tips 514
.NET Security 514
Hubs 514
Active Directory 514
Hubs 514
Key Notes 515
Articles 515
ADO.NET 515
Roadmaps and Overviews 515
Seminars and WebCasts 515
ASP.NET 515
Hubs 515
Roadmaps and Overviews 516
Knowledge Base 516
Articles 516
How Tos 516
Seminars and WebCasts 517
Enterprise Services 517
Knowledge Base 517
Roadmaps and Overviews 517
How Tos 518
FAQs 518
Seminars and WebCasts 518
IIS (Internet Information Server) 518
Hubs 518
Remoting 518
Roadmaps and Overviews 518
How Tos 519
Seminars and WebCasts 519
SQL Server 519
Hubs 519
Seminars and WebCasts 519
Visual Studio .NET 519
Hubs 519
Roadmaps and Overviews: 519
Web Services 520
Hubs 520
Roadmaps and Overviews 520
How Tos 520
Seminars and WebCasts 520
Windows 2000 521
Hubs 521
How Does It Work? 523
IIS and ASP.NET Processing 523
Application Isolation 524
The ASP.NET ISAPI Extension 524
IIS 6.0 and Windows .NET Server 524
ASP.NET Pipeline Processing 525
The Anatomy of a Web Request 526
Event Handling 530
Implementing a Custom HTTP Module 531
Implementing a Custom HTTP Handler 531
ASP.NET Identity Matrix 533
Cryptography and Certificates 537
Keys and Certificates 537
X.509 Digital Certificates 538
Certificate Stores 538
More Information 539
Cryptography 539
Technical Choices 539
Cryptography in .NET 540
Summary 543
.NET Web Application Security 545
GLOSSARY 547
INDEX 565
|