| Preface | p. v |
| Acknowledgements | p. ix |
| Chapter Summaries | p. xi |
| Part 1 Introduction | p. 1 |
| Chapter 1 A Fault Model for Software Security Testing | p. 3 |
| Why Security Testing is Different | p. 3 |
| A Fault Model for Security Vulnerabilities | p. 5 |
| Security Concerns and the How to Break Software Fault Model | p. 7 |
| Security and the User Interface | p. 8 |
| Security and the File-System User | p. 9 |
| Security and the Operating-System User | p. 9 |
| Security and the Software User | p. 9 |
| Security Inside the Software | p. 10 |
| Creating an Attack Plan | p. 10 |
| Attacking Software Dependencies | p. 11 |
| User-Interface Attacks | p. 12 |
| Attacking Design | p. 12 |
| Attacking Implementation | p. 12 |
| Conclusion | p. 13 |
| Exercises | p. 13 |
| References | p. 14 |
| Part 2 Creating Unanticipated Scenarios | p. 15 |
| Chapter 2 Attacking Software Dependencies | p. 17 |
| Attack 1 Block access to libraries | p. 19 |
| Attack 2 Manipulate the application's registry values | p. 24 |
| Attack 3 Force the application to use corrupt files | p. 30 |
| Attack 4 Manipulate and replace files that the application creates, reads from, writes to, or executes | p. 34 |
| Attack 5 Force the application to operate in low memory, disk-space and network-availability conditions | p. 35 |
| Summary of the Dependency Attacks: A Checklist for Battle | p. 38 |
| Conclusion | p. 39 |
| Exercises | p. 39 |
| Chapter 3 Breaking Security Through the User Interface | p. 41 |
| Attack 6 Overflow input buffers | p. 41 |
| Attack 7 Examine all common switches and options | p. 44 |
| Attack 8 Explore escape characters, character sets, and commands | p. 47 |
| Summary of the User-Interface Attacks: A Checklist for Battle | p. 56 |
| Conclusion | p. 57 |
| Exercises | p. 57 |
| References | p. 58 |
| Part 3 Design and Implementation Attacks | p. 59 |
| Chapter 4 Attacking Design | p. 61 |
| Attack 9 Try common default and test account names and passwords | p. 61 |
| Attack 10 Use Holodeck to expose unprotected test APIs | p. 65 |
| Attack 11 Connect to all ports | p. 67 |
| Attack 12 Fake the source of data | p. 71 |
| Attack 13 Create loop conditions in any application that interprets script, code, or other user-supplied logic | p. 73 |
| Attack 14 Use alternate routes to accomplish the same task | p. 74 |
| Attack 15 Force the system to reset values | p. 80 |
| Summary of the Design Attacks: A Checklist for Battle | p. 82 |
| Conclusion | p. 82 |
| Exercises | p. 82 |
| References | p. 83 |
| Chapter 5 Attacking Implementation | p. 85 |
| Attack 16 Get between time of check and time of use | p. 86 |
| Attack 17 Create files with the same name as files protected with a higher classification | p. 88 |
| Attack 18 Force all error messages | p. 93 |
| Attack 19 Use Holodeck to look for temporary files and screen their contents for sensitive information | p. 99 |
| Summary of the Implementatiion Attacks: A Checklist for Battle | p. 102 |
| Conclusion | p. 102 |
| Exercises | p. 102 |
| Part 4 Applying the Attacks | p. 105 |
| Chapter 6 Planning Your Attacks | p. 107 |
| Some Pre-Attack Preparations | p. 107 |
| Target #1 Microsoft Windows Media Player 9.0 | p. 110 |
| Security Threats | p. 113 |
| Dependency Attacks | p. 114 |
| Applying Attack 1 Block access to libraries | p. 114 |
| Applying Attack 2 Manipulate the application's registry values | p. 115 |
| Applying Attack 3 Force the application to use corrupt files | p. 116 |
| Applying Attack 4 Manipulate and replace files that the application creates, reads from, writes to, or executes | p. 117 |
| Applying Attack 5 Force the application to operate in low memory, disk-space and network-availability conditions | p. 118 |
| User-Interface Attacks | p. 118 |
| Applying Attack 6 Overflow input buffers | p. 119 |
| Applying Attack 7 Examine all common switches and options | p. 120 |
| Applying Attack 8 Explore escape characters, character sets, and commands | p. 121 |
| Design Attacks | p. 121 |
| Applying Attack 9 Try common default and test account names and passwords | p. 121 |
| Applying Attack 10 Use Holodeck to expose unprotected test APIs | p. 121 |
| Applying Attack 11 Connect to all ports | p. 122 |
| Applying Attack 12 Fake the source of data | p. 122 |
| Applying Attack 13 Create loop conditions in any application that interprets script, code, or other user-supplied logic | p. 122 |
| Applying Attack 14 Use alternate routes to accomplish the same task | p. 123 |
| Applying Attack 15 Force the system to reset values | p. 124 |
| Implementation Attacks | p. 124 |
| Applying Attack 16 Get between time of check and time of use | p. 124 |
| Applying Attack 17 Create files with the same name as files protected with a higher classification | p. 124 |
| Applying Attack 18 Force all error messages | p. 124 |
| Applying Attack 19 Use Holodeck to look for temporary files and screen their contents for sensitive information | p. 125 |
| Target #2 Mozilla 1.2.1 (Windows) | p. 125 |
| Security Threats | p. 128 |
| Dependency Attacks | p. 129 |
| Applying Attack 1 Block access to libraries | p. 129 |
| Applying Attack 2 Manipulate the application's registry values | p. 129 |
| Applying Attack 3 Force the application to use corrupt files | p. 130 |
| Applying Attack 4 Manipulate and replace files that the application creates, reads from, writes to, or executes | p. 131 |
| Applying Attack 5 Force the application to operate in low memory, disk-space and network-availability conditions | p. 131 |
| User-Interface Attacks | p. 132 |
| Applying Attack 6 Overflow input buffers | p. 132 |
| Applying Attack 7 Examine all common switches and options | p. 132 |
| Applying Attack 8 Explore escape characters, character sets, and commands | p. 134 |
| Design Attacks | p. 135 |
| Applying Attack 9 Try common default and test-account names and passwords | p. 135 |
| Applying Attack 10 Use Holodeck to expose unprotected test APIs | p. 135 |
| Applying Attack 11 Connect to all ports | p. 136 |
| Applying Attack 12 Fake the source of data | p. 136 |
| Applying Attack 13 Create loop conditions in any application that interprets script, code, or other user-supplied logic | p. 137 |
| Applying Attack 14 Use alternate routes to accomplish the same task | p. 137 |
| Applying Attack 15 Force the system to reset values | p. 138 |
| Implementation Attacks | p. 138 |
| Applying Attack 16 Get between time of check and time of use | p. 138 |
| Applying Attack 17 Create files with the same name as files protected with a higher classification | p. 138 |
| Applying Attack 18 Force all error messages | p. 139 |
| Applying Attack 19 Use Holodeck to look for temporary files and screen their contents for sensitive information | p. 139 |
| Target #3 OpenOffice.org 1.0.2 (Linux) | p. 139 |
| Security Threats | p. 141 |
| Dependency Attacks | p. 142 |
| Applying Attack 1 Block access to libraries | p. 142 |
| Applying Attack 2 Manipulate the application's registry values | p. 142 |
| Applying Attack 3 Force the application to use corrupt files | p. 142 |
| Applying Attack 4 Manipulate and replace files that the application creates, reads from, writes to, or executes | p. 143 |
| Applying Attack 5 Force the application to operate in low memory, disk-space and network-availability conditions | p. 143 |
| User-Interface Attacks | p. 144 |
| Applying Attack 6 Overflow input buffers | p. 144 |
| Applying Attack 7 Examine all common switches and options | p. 144 |
| Applying Attack 8 Explore escape characters, character sets, and commands | p. 144 |
| Design Attacks | p. 144 |
| Applying Attack 9 Try common default and test-account names and passwords | p. 144 |
| Applying Attack 10 Use Holodeck to expose unprotected test APIs | p. 145 |
| Applying Attack 11 Connect to all ports | p. 145 |
| Applying Attack 12 Fake the source of data | p. 145 |
| Applying Attack 13 Create loop conditions in any application that interprets script, code, or other user-supplied logic | p. 145 |
| Applying Attack 14 Use alternate routes to accomplish the same task | p. 145 |
| Applying Attack 15 Force the system to reset values | p. 146 |
| Implementation Attacks | p. 146 |
| Applying Attack 16 Get between time of check and time of use | p. 146 |
| Applying Attack 17 Create files with the same name as files protected with a higher classification | p. 146 |
| Applying Attack 18 Force all error messages | p. 146 |
| Applying Attack 19 Use Holodeck to look for temporary files and screen their contents for sensitive information | p. 147 |
| Summary | p. 147 |
| Exercises | p. 147 |
| Part 5 Conclusion | p. 149 |
| Chapter 7 Some Parting Advice | p. 151 |
| How Secure is Secure? | p. 151 |
| Mining for Gold in Bug Databases | p. 151 |
| Testers Are Not Librarians! | p. 152 |
| Postmortems | p. 153 |
| A Final Thought | p. 154 |
| Appendix A Using Holodeck | p. 155 |
| Using Holodeck | p. 155 |
| Launching Your Application Under Holodeck | p. 156 |
| Inserting Environmental Faults | p. 159 |
| Network Faults | p. 159 |
| Disk | p. 160 |
| Memory | p. 161 |
| Monitoring the Application | p. 162 |
| Appendix B Software's Invisible Users | p. 163 |
| Introduction | p. 163 |
| The Human User | p. 167 |
| The Operating-System User | p. 168 |
| The API User | p. 169 |
| The File-System User | p. 169 |
| Conclusion | p. 170 |
| References | p. 170 |
| Annotated Glossary of Terms | p. 171 |
| Index | p. 177 |