Malware Data Science Attack Detection And Attribution Joshua Saxe all chapter instant download
Malware Data Science Attack Detection And Attribution Joshua Saxe all chapter instant download
com
https://textbookfull.com/product/malware-data-science-
attack-detection-and-attribution-joshua-saxe/
OR CLICK BUTTON
DOWNLOAD NOW
https://textbookfull.com/product/detection-of-intrusions-and-malware-
and-vulnerability-assessment-cristiano-giuffrida/
textboxfull.com
https://textbookfull.com/product/advanced-synthetic-materials-in-
detection-science-subrayal-reddy/
textboxfull.com
https://textbookfull.com/product/windows-virus-and-malware-
troubleshooting-andrew-bettany/
textboxfull.com
Attribution in International Law and Arbitration 1st
Edition Carlo De Stefano
https://textbookfull.com/product/attribution-in-international-law-and-
arbitration-1st-edition-carlo-de-stefano/
textboxfull.com
https://textbookfull.com/product/from-social-data-mining-and-analysis-
to-prediction-and-community-detection-1st-edition-mehmet-kaya/
textboxfull.com
https://textbookfull.com/product/attack-from-within-barbara-mcquade/
textboxfull.com
👿
Use data visualization to identify and
explore malware campaigns, trends, and
relationships
T H E F I N E ST I N G E E K E N T E RTA I N M E N T ™
w w w.nostarch.com
Saxe
Price: $49.95 ($65.95 CDN) Sanders
Shelve In: Computers/Security
Joshua Saxe with Hillary Sanders
Part of the proceeds from this book will be
donated to the Environmental Defense Fund. Foreword by Anup Ghosh, PhD
Malware Data Science
Malware
Data Science
Attack Detection and
Attribution
b y Jos h u a S a x e
w i t h Hi l l a ry S a nd e r s
San Francisco
Malware Data Science. Copyright © 2018 by Joshua Saxe with Hillary Sanders.
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN-10: 1-59327-859-4
ISBN-13: 978-1-59327-859-5
For information on distribution, translations, or bulk sales, please contact No Starch Press, Inc. directly:
No Starch Press and the No Starch Press logo are registered trademarks of No Starch Press, Inc. Other
product and company names mentioned herein may be the trademarks of their respective owners. Rather
than use a trademark symbol with every occurrence of a trademarked name, we are using the names only
in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The information in this book is distributed on an “As Is” basis, without warranty. While every precaution
has been taken in the preparation of this work, neither the authors nor No Starch Press, Inc. shall have any
liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or
indirectly by the information contained in it.
To Alen Capalik,
for bringing me back to computers after a long hiatus
About the Authors
Joshua Saxe is Chief Data Scientist at the major security vendor Sophos,
where he leads a security data science research team. He’s also a princi-
pal inventor of Sophos’ neural network–based malware detector, which
defends tens of millions of Sophos customers from malware infections.
Before joining Sophos, Joshua spent five years leading DARPA-funded
security data research projects for the US government.
Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Chapter 11: Building a Neural Network Malware Detector with Keras . . . . . . . . . . . . 199
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Conte nt s in De ta il
Acknowledgments xix
Introduction xxi
What Is Data Science? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxii
Why Data Science Matters for Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxii
Applying Data Science to Malware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii
Who Should Read This Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiv
About This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiv
How to Use the Sample Code and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
1
Basic Static Malware Analysis 1
The Microsoft Windows Portable Executable Format . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
The PE Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
The Optional Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Section Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Dissecting the PE Format Using pefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Examining Malware Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Examining Malware Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Using the strings Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Analyzing Your strings Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2
Beyond Basic Static Analysis: x86 Disassembly 11
Disassembly Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Basics of x86 Assembly Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
CPU Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Arithmetic Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Data Movement Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Disassembling ircbot.exe Using pefile and capstone . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Factors That Limit Static Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Packing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Resource Obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Anti-disassembly Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Dynamically Downloaded Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3
A Brief Introduction to Dynamic Analysis 25
Why Use Dynamic Analysis? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Dynamic Analysis for Malware Data Science . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Basic Tools for Dynamic Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Typical Malware Behaviors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Loading a File on malwr.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Analyzing Results on malwr.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Limitations of Basic Dynamic Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4
Identifying Attack Campaigns
Using Malware Networks 35
Nodes and Edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Bipartite Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Visualizing Malware Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
The Distortion Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Force-Directed Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Building Networks with NetworkX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Adding Nodes and Edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Adding Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Saving Networks to Disk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Network Visualization with GraphViz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Using Parameters to Adjust Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
The GraphViz Command Line Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Adding Visual Attributes to Nodes and Edges . . . . . . . . . . . . . . . . . . . . . . . 48
Building Malware Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Building a Shared Image Relationship Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5
Shared Code Analysis 59
Preparing Samples for Comparison by Extracting Features . . . . . . . . . . . . . . . . . . . . . . 62
How Bag of Features Models Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
What are N-Grams? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Using the Jaccard Index to Quantify Similarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Using Similarity Matrices to Evaluate Malware Shared Code Estimation Methods . . . . . . 66
Instruction Sequence–Based Similarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Strings-Based Similarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Import Address Table–Based Similarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Dynamic API Call–Based Similarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Building a Similarity Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Scaling Similarity Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Minhash in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Minhash in Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Building a Persistent Malware Similarity Search System . . . . . . . . . . . . . . . . . . . . . . . . 79
Running the Similarity Search System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
xii Contents in Detail
6
Understanding Machine Learning–Based
Malware Detectors 89
Steps for Building a Machine Learning–Based Detector . . . . . . . . . . . . . . . . . . . . . . . . 90
Gathering Training Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Extracting Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Designing Good Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Training Machine Learning Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Testing Machine Learning Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Understanding Feature Spaces and Decision Boundaries . . . . . . . . . . . . . . . . . . . . . . . 93
What Makes Models Good or Bad: Overfitting and Underfitting . . . . . . . . . . . . . . . . . . 98
Major Types of Machine Learning Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Logistic Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
K-Nearest Neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Decision Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Random Forest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
7
Evaluating Malware Detection Systems 119
Four Possible Detection Outcomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
True and False Positive Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Relationship Between True and False Positive Rates . . . . . . . . . . . . . . . . . . 121
ROC Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Considering Base Rates in Your Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
How Base Rate Affects Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Estimating Precision in a Deployment Environment . . . . . . . . . . . . . . . . . . . 125
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8
Building Machine Learning Detectors 127
Terminology and Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Building a Toy Decision Tree–Based Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Training Your Decision Tree Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Visualizing the Decision Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Complete Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Building Real-World Machine Learning Detectors with sklearn . . . . . . . . . . . . . . . . . . 134
Real-World Feature Extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Why You Can’t Use All Possible Features . . . . . . . . . . . . . . . . . . . . . . . . . 137
Using the Hashing Trick to Compress Features . . . . . . . . . . . . . . . . . . . . . . 138
Building an Industrial-Strength Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Extracting Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Training the Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Running the Detector on New Binaries . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
What We’ve Implemented So Far . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Evaluating Your Detector’s Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Using ROC Curves to Evaluate Detector Efficacy . . . . . . . . . . . . . . . . . . . . 147
Computing ROC Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Splitting Data into Training and Test Sets . . . . . . . . . . . . . . . . . . . . . . . . . 148
Contents in Detail xiii
Computing the ROC Curve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Cross-Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Next Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9
Visualizing Malware Trends 155
Why Visualizing Malware Data Is Important . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Understanding Our Malware Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Loading Data into pandas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Working with a pandas DataFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Filtering Data Using Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Using matplotlib to Visualize Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Plotting the Relationship Between Malware Size and Detection . . . . . . . . . . 162
Plotting Ransomware Detection Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Plotting Ransomware and Worm Detection Rates . . . . . . . . . . . . . . . . . . . . 165
Using seaborn to Visualize Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Plotting the Distribution of Antivirus Detections . . . . . . . . . . . . . . . . . . . . . . 169
Creating a Violin Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
10
Deep Learning Basics 175
What Is Deep Learning? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
How Neural Networks Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Anatomy of a Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
A Network of Neurons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Universal Approximation Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Building Your Own Neural Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Adding Another Neuron to the Network . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Automatic Feature Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Training Neural Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Using Backpropagation to Optimize a Neural Network . . . . . . . . . . . . . . . 190
Path Explosion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Vanishing Gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Types of Neural Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Feed-Forward Neural Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Convolutional Neural Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Autoencoder Neural Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Generative Adversarial Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Recurrent Neural Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11
Building a Neural Network Malware Detector
with Keras 199
Defining a Model’s Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Compiling the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Training the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Extracting Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Creating a Data Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Incorporating Validation Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Saving and Loading the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Evaluating the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Enhancing the Model Training Process with Callbacks . . . . . . . . . . . . . . . . . . . . . . . . 211
Using a Built-in Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Using a Custom Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
12
Becoming a Data Scientist 215
Paths to Becoming a Security Data Scientist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
A Day in the Life of a Security Data Scientist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Traits of an Effective Security Data Scientist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Open-Mindedness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Boundless Curiosity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Obsession with Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Skepticism of Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Where to Go from Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Appendix
An Overview of Datasets and Tools 221
Overview of Datasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Chapter 1: Basic Static Malware Analysis . . . . . . . . . . . . . . . . . . . . . . . . . 222
Chapter 2: Beyond Basic Static Analysis: x86 Disassembly . . . . . . . . . . . . . 222
Chapter 3: A Brief Introduction to Dynamic Analysis . . . . . . . . . . . . . . . . . 222
Chapter 4: Identifying Attack Campaigns Using Malware Networks . . . . . . 222
Chapter 5: Shared Code Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Chapter 6: Understanding Machine Learning–Based Malware Detectors
and Chapter 7: Evaluating Malware Detection Systems . . . . . . . . . . . . . 223
Chapter 8: Building Machine Learning Detectors . . . . . . . . . . . . . . . . . . . . 224
Chapter 9: Visualizing Malware Trends . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Chapter 10: Deep Learning Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Chapter 11: Building a Neural Network Malware Detector with Keras . . . . . 224
Chapter 12: Becoming a Data Scientist . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Tool Implementation Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Shared Hostname Network Visualization . . . . . . . . . . . . . . . . . . . . . . . . . 225
Shared Image Network Visualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Malware Similarity Visualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Malware Similarity Search System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Machine Learning Malware Detection System . . . . . . . . . . . . . . . . . . . . . . 230
Index 233
Contents in Detail xv
Fore word
xviii Foreword
Acknowledgments
Thanks to Annie Choi, Laurel Chun, and Bill Pollock at No Starch Press
and to my copyeditor, Bart Reed. In all justice, they should be regarded as
co-authors of this book. Thanks in advance to the workers responsible for
printing, transporting, and selling copies of this book, and the engineers
responsible for its digital storage, transmission, and rendering. Thanks to
Hillary Sanders for bringing her remarkable talents to the project exactly
when they were needed. Gratitude to Gabor Szappanos for his excellent and
exacting technical review.
Thanks to my two year old daughter Maya, who, I'm happy to share,
slowed this project down dramatically. Thanks to Alen Capalik, Danny
Hillis, Chris Greamo, Anup Ghosh, and Joe Levy for their mentorship
over the past 10 years. Deep appreciation to the Defense Advanced
Research Projects Agency (DARPA) and Timothy Fraser for supporting
the research on which much of this book is based. Thanks to Mandiant,
and Mila Parkour, for obtaining and curating the APT1 malware samples
used for demonstration purposes in this book. Deep appreciation to the
authors of Python, NetworkX, matplotlib, numpy, sklearn, Keras, seaborn,
pefile, icoutils, malwr.com, CuckooBox, capstone, pandas, and sqlite for
your contributions to free and open source security and data science
software.
Tremendous gratitude to my parents, Maryl Gearhart and Geoff Saxe,
for introducing me to computers, for tolerating my teenage hacker phase
(and all the illegality that entailed), and for their boundless love and sup-
port. Thanks to Gary Glickman for his indispensable love and support.
Finally, thanks to Ksenya Gurshtein, my partner in life, for supporting me
in this endeavor completely and without hesitation.
Joshua Saxe
Thanks to Josh, for including me in this! Thanks to Ani Adhikari for being
an amazing teacher. Thanks to Jacob Michelini, because he really wanted
his name in a book.
Hillary Sanders
Introduction
1. Target (https://www.rsaconference.com/events/us17/agenda/sessions/6662-applied-machine-
learning-defeating-modern-malicious), Mastercard (https://blogs.wsj.com/cio/2017/11/15/artificial-
intelligence-transforms-hacker-arsenal/), and Wells Fargo (https://blogs.wsj.com/cio/2017/11/16/
the-morning-download-first-ai-powered-cyberattacks-are-detected/).
xxii Introduction
Due to the sheer volume of malware, manual detection techniques
such as signatures are no longer a reasonable method for detecting all
cyberattacks. Because data science techniques automate much of the
work that goes into detecting cyberattacks, and vastly decrease the mem-
ory usage needed to detect such attacks, they hold tremendous promise
in defending networks and users as cyber threats grow.
Finally, data science matters for security because data science is the tech-
nical trend of the decade, both inside and outside of the security industry,
and it will likely remain so through the next decade. Indeed, you’ve probably
seen applications of data science everywhere—in personal voice assistants
(Amazon Echo, Siri, and Google Home), self-driving cars, ad recommenda-
tion systems, web search engines, medical image analysis systems, and fitness
tracking apps.
We can expect data science–driven systems to have major impacts in
legal services, education, and other areas. Because data science has become
a key enabler across the technical landscape, universities, major companies
(Google, Facebook, Microsoft, and IBM), and governments are investing
billions of dollars to improve data science tools. Thanks to these invest-
ments, data science tools will become even more adept at solving hard
attack-detection problems.
Introduction xxiii
Who Should Read This Book?
This book is aimed toward security professionals who are interested in
learning more about how to apply data science to computer security prob-
lems. If computer security and data science are new to you, you might find
yourself having to look up terms to give yourself a little bit of context, but
you can still read this book successfully. If you’re only interested in data
science, but not security, this book is probably not for you.
The next two chapters of the book, Chapters 4 and 5, focus on mal-
ware relationship analysis, which involves looking at similarities and dif-
ferences between collections of malware to identify malware campaigns
against your organization, such as a ransomware campaign controlled by
a group of cybercriminals, or a concerted, targeted attack on your orga-
nization. These stand-alone chapters are for readers who are interested
not only in detecting malware, but also in extracting valuable threat intel-
ligence to learn who is attacking their network. If you’re less interested in
threat intelligence and more interested in data science–driven malware
detection, you can safely skip these chapters.
xxiv Introduction
The next four chapters cover everything you need to know to under-
stand, apply, and implement machine learning–based malware detection
systems. These chapters also provide a foundation for applying machine
learning to other security contexts.
• Chapter 10: Deep Learning Basics covers the basic concepts that
underlie deep learning.
• Chapter 11: Building a Neural Network Malware Detector with Keras
explains how to implement deep learning–based malware detection sys-
tems in Python using open source tools.
• Chapter 12: Becoming a Data Scientist concludes the book by sharing
different pathways to becoming a data scientist and qualities that can
help you succeed in the field.
• Appendix: An Overview of Datasets and Tools describes the data and
example tool implementations accompanying the book.
Introduction xxv
and run it within your own VirtualBox environment. You can download
the book’s accompanying data at http://www.malwaredatascience.com/, and
you can download the VirtualBox for free at https://www.virtualbox.org/wiki/
Downloads. The code has been tested on Linux, but if you prefer to work
outside of the Linux VirtualBox, the same code should work almost as well
on MacOS, and to a lesser extent on Windows machines.
If you’d rather install the code and data in your own Linux environ-
ment, you can download them here: http://www.malwaredatascience.com/.
You’ll find a directory for each chapter in the downloadable archive,
and within each chapter’s directory there are code/ and data/ directories
that contain the corresponding code and data. Code files correspond to
chapter listings or sections, whichever makes more sense for the applica-
tion at hand. Some code files are exactly like the listings, whereas others
have been changed slightly to make it easier for you to play with parame-
ters and other options. Code directories come with pip requirements.txt files,
which give the open source libraries that the code in that chapter depends
on to run. To install these libraries on your machine, simply type pip -r
requirements.txt in each chapter’s code/ directory.
Now that you have access to the code and data for this book, let’s get
started.
xxvi Introduction
1
B a s i c S t a t i c M a l w a r e A n a ly s i s
Dean
Canon Bursar
Precentor
Honorary Canons
Head Verger
Thomas Meatyard.
The post-office address of any of the above mentioned is “The Cathedral of St.
John the Divine, New York, N. Y.”
The Bishop’s office is in the new Synod House at the corner of Amsterdam
Avenue and Cathedral Parkway. The offices of the Dean, Canon Bursar, etc., are in
the old Synod House which stands on the site of the South Transept. (See page 9).
The seal of the Diocese is in the form of a pointed oval, or vesica,[4] and is as
follows:
Quarterly gules and argent, over all a cross counter-changed of the same. In
dexter chief the American eagle with wings displayed or; in sinister chief and dexter
base the sails of a windmill proper from the arms of the City of New York. In sinister
base two swords in saltire or from the arms of the see of London. Surmounted by
an episcopal mitre proper. The arms surmounted on a field purpure and enclosed
by a bordure azure lined (or edged) or bearing the legend “Seal of the Diocese of
New York MDCCLXXXV” or.
The red color (gules) and the swords are historically reminiscent of the fact that
prior to the Independence of the United States the church throughout the American
Colonies was under the ecclesiastical jurisdiction of the Diocese of London.
Diocesan Seal Cathedral Seal
Services
The Cathedral is open for private prayer and meditation every day of the year
from 7.30 a. m. to 5.30 p. m. There is a service in one of the chapels every week-
day at 7.30 a. m. The principal Sunday services are at 8 a. m., 11 a. m. and 4 p. m.,
the latter two being with full choral service and sermon. Other services are held on
week-days and Sundays as announced from time to time. As before stated, all
seats are free, and residents and strangers of all denominations are cordially
welcome.
The Cathedral service is neither “high” nor “low.” It is the prescribed liturgy of the
Church, with a fully choral rendering and congregational participation. Except during
the vacation season, there are usually about 60 persons in the procession. The
processional hymn is begun in the Ambulatory, through the south gate of which the
procession enters the Crossing and goes to the Choir. First comes the crucifer,
followed in order by the boys of the choir, the men of the choir, the Head Master of
the Choir School, the Verger and the clergy in inverse order of their rank. The
Bishop, if present, comes last, and is immediately preceded by the Verger and an
acolyte bearing the Bishop’s pastoral staff.[5] If the Bishop is absent, the Dean
comes last, preceded by the Verger. If neither Bishop nor Dean is present, the
Verger precedes all the clergy. The Verger (in black gown with purple facings),
carries a silver staff surmounted by the figure of an angel holding a tablet on which
is engraved the symbol of St. John the Divine, the chalice with emerging serpent.
When preceding the Bishop he carries his staff upright at his right shoulder, but
when going before the other clergy he carries it in the hollow of his left arm. The
organist and Master of the Choristers, wearing the gown and hood of Doctor of
Music, is usually invisible, being seated at the console in the gallery on the screen
at the south side of the Choir. At extraordinary musical services, an orchestra is
seated in the Choir, between the stalls, and then the Master of the Choristers
stands in the Choir, from which point he directs the singers, orchestra and assistant
organist. The recessional is in the same order as the processional. After entering
the Ambulatory, the procession halts while a dismissal prayer or hymn is said or
sung there, and the solemn service ends with a far-away “Amen” from the unseen
choir.[6]
Visitors
Visitors may see the Cathedral at all times between 7.30 a. m. and 5.30 p. m.
except during the hours of service. The Verger is usually in attendance.
Architecture
The architects of the Cathedral have been: Messrs. George L. Heins and C.
Grant LaFarge from July, 1891, until Mr. Heins’ death in September, 1907;[7] Mr.
LaFarge from September, 1907, until the completion of the Choir in April, 1911; and
Messrs. Cram & Ferguson from April, 1911, to the present time. Mr. Henry Vaughan
was architect of three of the Seven Chapels of Tongues, Messrs. Heins & LaFarge
of two, Messrs. Cram & Ferguson of one and Messrs. Carrere & Hastings of one, as
mentioned hereafter.
The prevailing style of the Cathedral will be French Gothic. The north of France, it
will be remembered, is the birthplace of Gothic architecture. There, in the region so
recently devastated by war, Gothic architecture rose and reached the flower of
perfection in such monuments as Amiens, Rheims, Notre Dame (Paris), Chartres,
Beauvais, and Rouen Cathedrals and many other churches, great and small.
Progress of Construction
The Founder of the Cathedral was the Right Rev. Horatio Potter, (Provisional
Bishop 1854-1861 and Bishop of New York 1861-1887), who proposed it in 1872.
The charter was granted by the Legislature of the state of New York in 1873. The
Right Rev. Henry Codman Potter, (Assistant Bishop 1883-1887 and Bishop of New
York 1887-1908), nephew and successor of Bishop Horatio Potter, actively
forwarded the movement for raising funds in 1886. The Close was purchased from
the Leake & Watts Orphan Asylum by deed dated October 31, 1891. The first
service on the ground was held January 1, 1892. The corner-stone was laid on St.
John’s Day, December 27, 1892.[9] The first service was held in the Crypt January
8, 1899, and the first service in the Choir and Crossing (being the consecration
service) April 19, 1911. Ground was broken for the Nave May 8, 1916, by the Right
Rev. David Hummell Greer, (Bishop Coadjutor 1904-1908 and Bishop of New York
1908-1919). The parts thus far built are the Crypt, Choir, seven Chapels of
Tongues, Crossing and foundation for the Nave. The Mohegan golden granite for
the walls of the Nave is now being quarried near Peekskill, N. Y., and is being
delivered on the grounds. Some details of the Choir and Crossing are unfinished.
The completed portion of the Cathedral has cost about $4,000,000, and it is
estimated that the Nave, West Front, Transepts, Spire, etc., will cost about
$15,000,000, making the total estimated cost about $19,000,000.
Exterior Survey
Before entering the Cathedral the visitor should make a circuit of the Close
(beginning on the south side and going eastward), comparing the outlines of the
Cathedral with the plan and noting the location of the other buildings. This will give
him a better understanding of the interior of the Cathedral and of its ultimate
connection with the Bishop’s House and the Choir School by means of cloisters. It
will be noted that the Old Synod House (brick, with Ionic-columned portico)
occupies the site of the South Transept.
The Seven Chapels of Tongues, (see page 69 et seq.,) may be identified on the
exterior by the following characteristics (south to north): Chapel of St. James,
rectangular plan, crenelated parapet of roof, and pinnacles on buttresses. Chapel of
St. Ambrose, half round window arches. Chapel of St. Martin of Tours, fleurs de lis
in quatrefoils above large windows; narrow pointed arch windows with single lights
in basement. Chapel of St. Saviour (easternmost), rectangular plan; cross on gable;
statues in niches of buttresses and wall. Chapel of St. Columba, angel on roof;
statues in niches of buttresses. Chapel of St. Boniface, statues in niches of
buttresses; small mullioned windows of three lights in basement. Chapel of St.
Ansgarius, rectangular plan; parapet of quatrefoil tracery; pinnacles on buttresses.
Three of the chapels have the following sculptures by Mr. Gutzon Borglum:
Chapel of St. Saviour: On eastern wall above the great window, the Christ Child; in
niches of buttresses on either side of window, Angels of the Resurrection; and
beneath the window, the Virgin, seated between (left) St. Simeon who blessed the
infant Jesus (Luke ii. 25-35) and (right) St. Zacharias, father of John the Baptist
(Luke i. 67-80).[11] Chapel of St. Columba: On roof, an angel with hands joined in
prayer; in upper part of great window, St. Columba with tamed wolf, recalling how
he subdued wild beasts as well as wild tribes; and in niches of buttresses the four
patron saints of the British Isles (left to right): St. David of Wales in beretta and
fringed gown: St. George of England in armor with cross on shield and dragon at
feet; St. Andrew of Scotland with diagonal cross[12]; and St. Patrick of Ireland, in
Bishop’s robes, with crozier in right hand and shamrock in left. Chapel of St.
Boniface: In niches of buttresses, Charlemagne, with crown and sword; Alcuin,
Charlemagne’s preceptor, in monastic garb with manuscripts in right hand;
Gutenberg, with book in each hand, his initials “J.G.” on one; and Luther, in
scholar’s gown, with book between hands.
The Clerestory of the Choir rises above the roofs of the chapels. In the canopied
niches near the top of the turrets and buttresses are 10 stone figures 9½ feet high
by Mr. Borglum, as follows (south to north): St. James the Less with fuller’s club
(indicating manner of his martyrdom), and St. Philip with Latin cross (symbol of his
crucifixion), together on turret; St. Bartholomew[13]; St. Thomas with square
(spiritual architect); St. James the Great with staff (pilgrim); St. Peter with key (to the
kingdom of Heaven); St. Andrew with diagonal cross; St. Matthew[13] with drapery
over head; and St. Simeon with saw, and St. Jude with spear, (indicating manner of
their death), together on turret.
Fourteen Stone Shields (only 12 in place), in the spandrels of the clerestory
windows above the seven Chapels of Tongues, bear (or will bear) the following
devices (south to north:) Above Chapel of St. James, (left) winged ox; and (right)
artist’s palette, brushes and maulsticks, and lily, symbolizing St. Luke.[14] Above
Chapel of St. Ambrose (left) lily, and (right) rose, both symbols of the Virgin Mary.
Above Chapel of St. Martin of Tours, (left) eagle, and (right) chalice, symbols of St.
John. Above Chapel of St. Saviour, (left) letters ΙϹ, ΧϹ, ΝΙ, ΚΑ, in four quarters
formed by a Greek cross, signifying Jesus Christ Conquers; and (right), initials SP,
SF, SS, of the Latin words Sanctus Pater, Sanctus Filius, Sanctus Spiritus, (Holy
Father, Holy Son, Holy Spirit,) in a trefoil, symbolizing the Trinity.[15] Above Chapel
of St. Columba, (left) crossed keys, symbol of St. Peter, and (right) crossed swords,
symbol of St. Paul. Above Chapel of St. Boniface, (left) winged lion; and (right) fig
tree, both symbols of St. Mark. Above Chapel of St. Ansgarius, (left) winged man
and (right) axe and book, both symbols of St. Matthew.
1. Jesus Christ Conquers. 2. Holy Father, Holy Son, Holy Spirit. 3 and 4. Saint Luke.
Surmounting the roof of the Choir, and facing eastward, is a bronze statue, 9½
feet high, by Mr. Borglum, representing St. Gabriel as Angel of the Resurrection,
blowing a trumpet.
West Front
Returning to Amsterdam avenue at 112th street, we come to what will be the
main entrance of the Cathedral. In the space (now unoccupied) between the
sidewalk and the foundation of the Nave will be the West Front (see figure 1 of
plan). The tentative design for the West Front provides for three large and two
smaller recessed portals, similar to the plan of Bourges Cathedral. Above the north
and south portals rise two heavily buttressed square towers, named after St. Peter
(north) and St. Paul (south), presenting strong relief. Above the central portal is the
great Rose Window, flanked by the mullioned Gothic windows of the towers. Above
these, a gallery of niches containing statues extends entirely across the façade,
after the manner of the Gallery of Kings at Rheims Cathedral. Above this rise the
belfries of the two towers, each surmounted by pointed turrets at the four corners,
while between them, just above the gallery, appears the gable of the Nave. The
West front is 220 feet wide and 80 feet deep, including the buttressing. The towers
are 50 feet square, 235 feet high to the top of the parapets and 265 feet high to the
top of the pinnacles.
The Nave
Crossing the space to be occupied by the West Front, we ascend temporary
steps to the foundation of the Nave (figure 2 of plan). Superstructure not yet begun
(June 15th, 1924). Here the visitor should pause and imagine himself entering the
western limb of the Cathedral, 225 feet long, 132 feet wide, 175 feet high outside
and 130 feet high inside, built in pure 13th century Gothic adapted to the
requirements of the plan. The central aisle,[16]—as wide between the centers of
piers as 112th street is between building lines—has two narrower aisles on each
side. Instead of the closely-grown-up forest effect produced by the columns of many
Gothic cathedrals, an air of openness and spaciousness, which distinguishes this
Cathedral throughout, is given by the relatively small number of piers and columns
and their ingenious disposition. In this arrangement the architect has made two
notable departures from the ordinary Gothic type: One is the erection of the
clerestory on the secondary line of columns (those nearest the side walls,) which
modifies the exterior system of flying buttresses, and the other is the introduction of
intermediate slender columns in the primary line of piers, resolving the Nave into a
system of four squares or double bays instead of eight rectangular bays. As the
primary ranges of piers and columns rise to the spring of the arches which support
the roof of the Nave, instead of being shortened to support the clerestory, an effect
of great spaciousness and lofty aspiration is produced; and this arrangement,
together with the rhythmic alternation of great piers and relatively small clustered
columns, allows a play of light and shade surpassing that of any mediaeval
cathedral. Under the roofs of the north and south aisles runs the triforium gallery;
and there are many beautiful details of ornament, including the tracery, panelling,
capitals, niches, pinnacles and sculptures. A light and cheerful effect is produced by
the illumination through 32 stained glass windows—eight in the aisle and eight in
the clerestory on each side,—and the great Rose Window in the west end.
While standing at the west end of the foundation, the visitor should survey the
great area of floor space that lies before him; then, looking eastward 225 feet (the
length of a city block and half the width of a street) imagine the present temporary
west wall of the Crossing removed, and the view extended about 225 feet farther to
the High Altar in the Sanctuary. He will then have an idea of the great vista of the
completed church.
ONE SIDE OF THE INTERIOR OF THE NAVE
Speaking of the building of the Cathedral in general and of the Nave in particular,
in his address to the 138th Annual Convention of the Diocese of New York on May
11, 1921, Bishop Manning said: “As to the practical value and importance of the
Cathedral, no one who knows anything of its work or of the multitudes that gather
here for worship can entertain a question. Large as it is, the present space is
insufficient. The Nave is urgently needed, not only that the great ideal which the
building embodies may be carried forward, but that there may be room for the
people who come for spiritual help, and that the Cathedral may meet its unequalled
missionary opportunity. I hope that our people, and especially those who have the
stewardship of wealth, will keep this great spiritual and missionary enterprise in
mind, and that many may be moved to aid it. The building waits only for the
necessary funds. And in the revised drawings, we at last have plans which by their
majesty and beauty worthily express the aim and ideal of this great structure ... I
believe that we have now a plan worthy of the unequalled opportunity of this
glorious Temple of God, and of its relation to the greatest and most complex city in
the world. I believe that for the carrying forward towards completion of such a
building as this, of which the whole country may be proud, and for the upholding of
the spiritual, social and civic ideals which it embodies, not only the people of our
own Church but many others in this metropolis and elsewhere will be glad to make
their gifts and to have their part and share with us.”
The Crossing
Walking the length of the Nave foundation (2 on plan) we pass through temporary
doorways and enter the Crossing (3), so-called from its location at the intersection
of the long and short arms of the cruciform ground plan. In this space, 100 feet
square, floored with concrete, are 1500 chairs for the congregation. To the
eastward, the Crossing opens into the Choir (10) and Ambulatory (12-12). On the
north, west and south sides the spaces between the ponderous piers of Maine
granite are filled with temporary windows and concrete walls which will be removed
when the Nave (2) and the North and South Transepts (4 and 5) are built. The
removal of these temporary walls will improve the acoustics. The rough, unadorned
piers on the north, west and south sides will eventually be faced with Frontenac
stone like those on the east side. The massiveness of this masonry may be judged
by the fact that a single pair of these piers with their connecting arch weighs 4000
tons. The Dome of the Crossing, 162 feet (just the height of Niagara Falls) above
the floor, is a remarkable piece of construction, the tiles having been laid by the
ingenious Gustavino method without the support of scaffolding. The present dome
is temporary; the permanent vault will be 200 feet above the floor. Mr. J. P. Morgan,
Mr. George S. Bowdoin and Mr. Harris C. Fahnestock were large contributors to the
building of the Crossing.
“Glory be to God on high and on ‖ earth ‖ peace ‖ good will towards ‖ men. We praise
thee ‖ we bless thee, we ‖ worship ‖ thee, we glorify thee, we give thanks ‖ to thee for thy
great glory. O Lord God, heavenly King.”
THE PULPIT
“In Memory of ‖ Henry Codman Potter ‖ the gift of ‖ Mrs. Russell Sage ‖ A.D. 1916.”
The pulpit, which cost $30,000, was designed by Mr. Henry Vaughan and
executed by Messrs. John Evans & Co. of Boston.
ONE OF THE BARBERINI TAPESTRIES
Barberini Tapestries. The tapestries in the Crossing and Ambulatory were woven
in the first half of the 17th century on the papal looms founded by Cardinal Barberini
under the patronage of his uncle Pope Urban VIII. They were executed under the
direction of the master weaver Jacques della Riviera from cartoons painted by Jean
Francois Romanelli. The cartoons are now in the Vatican. The tapestries, originally
designed for the throne room of the Barberini Palace at Rome, afterward a part of
the Ffoulke Collection in Washington, and finally presented to the Cathedral by Mrs.
Elizabeth U. Coles, are twelve in number and represent scenes in the life of Christ.
Four of them hang in the Crossing as follows: In the northeast corner, the Delivery
of the Keys to St. Peter; southeast corner, the Last Supper; southwest corner, the
Adoration of the Shepherds; and northwest corner, the Flight of Joseph and Mary
with the infant Jesus into Egypt. Seven hang in the Ambulatory, as follows (north to
south): Christ’s Baptism, the Annunciation, the Adoration of the Magi, the Crucifixion
(directly behind and above the High Altar,) the Transfiguration, the Resurrection,
and the Agony in the Garden. The twelfth, a map of the Holy Land, is not at present
hung. These works are all 15 feet 8 inches high and average 14 feet 1 inch wide.
The Delivery of the Keys to St. Peter, the Last Supper, and the Flight into Egypt are
more than 17 feet wide. These tapestries appear more like paintings than products
of the loom.
The Litany Desk at the eastern end of the middle aisle (often removed) is of
carved oak. Surmounting the ends are two praying angels, while on the front are
statues of St. Michael with sword, St. John with chalice, and St. Gabriel with lilies,
all facing the Altar. An inscription reads:
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com