Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(274)

Side by Side Diff: chrome/browser/safe_browsing/sandboxed_zip_analyzer_unittest.cc

Issue 1262753002: [SafeBrowsing] Send pings for Zip files that contain other archives. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/safe_browsing/sandboxed_zip_analyzer.h" 5 #include "chrome/browser/safe_browsing/sandboxed_zip_analyzer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 zip_analyzer::Results* results) { 74 zip_analyzer::Results* results) {
75 DCHECK(results); 75 DCHECK(results);
76 base::RunLoop run_loop; 76 base::RunLoop run_loop;
77 ResultsGetter results_getter(run_loop.QuitClosure(), results); 77 ResultsGetter results_getter(run_loop.QuitClosure(), results);
78 scoped_refptr<SandboxedZipAnalyzer> analyzer( 78 scoped_refptr<SandboxedZipAnalyzer> analyzer(
79 new SandboxedZipAnalyzer(file_path, results_getter.GetCallback())); 79 new SandboxedZipAnalyzer(file_path, results_getter.GetCallback()));
80 analyzer->Start(); 80 analyzer->Start();
81 run_loop.Run(); 81 run_loop.Run();
82 } 82 }
83 83
84 #if defined(OS_WIN)
85 void ExpectPEHeaders(const BinaryData& data,
86 cosnt ClientDownloadRequest_ArchivedBinary& binary) {
87 ASSERT_EQ(data.is_signed, binary.has_signature());
88 if (data.is_signed) {
89 ASSERT_LT(0, binary.signature().signed_data_size());
90 ASSERT_NE(0U, binary.signature().signed_data(0).size());
91 }
92 ASSERT_TRUE(binary.has_image_headers());
93 ASSERT_TRUE(binary.image_headers().has_pe_headers());
94 EXPECT_TRUE(binary.image_headers().pe_headers().has_dos_header());
95 EXPECT_TRUE(binary.image_headers().pe_headers().has_file_header());
96 EXPECT_TRUE(binary.image_headers().pe_headers().has_optional_headers32());
97 EXPECT_FALSE(binary.image_headers().pe_headers().has_optional_headers64());
98 }
99 #endif
100
84 // Verifies expectations about a binary found by the analyzer. 101 // Verifies expectations about a binary found by the analyzer.
85 void ExpectBinary(const BinaryData& data, 102 void ExpectBinary(const BinaryData& data,
86 const ClientDownloadRequest_ArchivedBinary& binary) { 103 const ClientDownloadRequest_ArchivedBinary& binary) {
87 ASSERT_TRUE(binary.has_file_basename()); 104 ASSERT_TRUE(binary.has_file_basename());
88 EXPECT_EQ(data.file_basename, binary.file_basename()); 105 EXPECT_EQ(data.file_basename, binary.file_basename());
89 ASSERT_TRUE(binary.has_download_type()); 106 ASSERT_TRUE(binary.has_download_type());
90 EXPECT_EQ(data.download_type, binary.download_type()); 107 EXPECT_EQ(data.download_type, binary.download_type());
91 ASSERT_TRUE(binary.has_digests()); 108 ASSERT_TRUE(binary.has_digests());
92 ASSERT_TRUE(binary.digests().has_sha256()); 109 ASSERT_TRUE(binary.digests().has_sha256());
93 EXPECT_EQ(std::string(data.sha256_digest, 110 EXPECT_EQ(std::string(data.sha256_digest,
94 data.sha256_digest + crypto::kSHA256Length), 111 data.sha256_digest + crypto::kSHA256Length),
95 binary.digests().sha256()); 112 binary.digests().sha256());
96 EXPECT_FALSE(binary.digests().has_sha1()); 113 EXPECT_FALSE(binary.digests().has_sha1());
97 EXPECT_FALSE(binary.digests().has_md5()); 114 EXPECT_FALSE(binary.digests().has_md5());
98 ASSERT_TRUE(binary.has_length()); 115 ASSERT_TRUE(binary.has_length());
99 EXPECT_EQ(data.length, binary.length()); 116 EXPECT_EQ(data.length, binary.length());
100 #if defined(OS_WIN) // ExtractImageFeatures is only implemented for Win. 117 #if defined(OS_WIN)
101 ASSERT_EQ(data.is_signed, binary.has_signature()); 118 // ExtractImageFeatures only implemented for Windows, and only works on PE
102 if (data.is_signed) { 119 // files.
103 ASSERT_LT(0, binary.signature().signed_data_size()); 120 if (binary.file_basename().find(".exe") != std::string::npos) {
104 ASSERT_NE(0U, binary.signature().signed_data(0).size()); 121 ExpectPEHeaders(data, binary);
122 return;
105 } 123 }
106 ASSERT_TRUE(binary.has_image_headers()); 124 #endif // OS_WIN
107 ASSERT_TRUE(binary.image_headers().has_pe_headers());
108 EXPECT_TRUE(binary.image_headers().pe_headers().has_dos_header());
109 EXPECT_TRUE(binary.image_headers().pe_headers().has_file_header());
110 EXPECT_TRUE(binary.image_headers().pe_headers().has_optional_headers32());
111 EXPECT_FALSE(binary.image_headers().pe_headers().has_optional_headers64());
112 #else // OS_WIN
113 ASSERT_FALSE(binary.has_signature()); 125 ASSERT_FALSE(binary.has_signature());
114 ASSERT_FALSE(binary.has_image_headers()); 126 ASSERT_FALSE(binary.has_image_headers());
115 #endif // !OS_WIN
116 } 127 }
117 128
118 static const uint8_t kUnsignedDigest[]; 129 static const uint8_t kUnsignedDigest[];
119 static const uint8_t kSignedDigest[]; 130 static const uint8_t kSignedDigest[];
131 static const uint8_t kJSEFileDigest[];
120 static const BinaryData kUnsignedExe; 132 static const BinaryData kUnsignedExe;
121 static const BinaryData kSignedExe; 133 static const BinaryData kSignedExe;
134 static const BinaryData kJSEFile;
122 135
123 base::FilePath dir_test_data_; 136 base::FilePath dir_test_data_;
124 content::TestBrowserThreadBundle browser_thread_bundle_; 137 content::TestBrowserThreadBundle browser_thread_bundle_;
125 content::InProcessUtilityThreadHelper utility_thread_helper_; 138 content::InProcessUtilityThreadHelper utility_thread_helper_;
126 }; 139 };
127 140
128 // static 141 // static
129 const uint8_t SandboxedZipAnalyzerTest::kUnsignedDigest[] = { 142 const uint8_t SandboxedZipAnalyzerTest::kUnsignedDigest[] = {
130 0x1e, 0x95, 0x4d, 0x9c, 0xe0, 0x38, 0x9e, 0x2b, 0xa7, 0x44, 0x72, 0x16, 143 0x1e, 0x95, 0x4d, 0x9c, 0xe0, 0x38, 0x9e, 0x2b, 0xa7, 0x44, 0x72,
131 0xf2, 0x17, 0x61, 0xf9, 0x8d, 0x1e, 0x65, 0x40, 0xc2, 0xab, 0xec, 0xdb, 144 0x16, 0xf2, 0x17, 0x61, 0xf9, 0x8d, 0x1e, 0x65, 0x40, 0xc2, 0xab,
132 0xec, 0xff, 0x57, 0x0e, 0x36, 0xc4, 0x93, 0xdb 145 0xec, 0xdb, 0xec, 0xff, 0x57, 0x0e, 0x36, 0xc4, 0x93, 0xdb};
133 };
134 const uint8_t SandboxedZipAnalyzerTest::kSignedDigest[] = { 146 const uint8_t SandboxedZipAnalyzerTest::kSignedDigest[] = {
135 0xe1, 0x1f, 0xfa, 0x0c, 0x9f, 0x25, 0x23, 0x44, 0x53, 0xa9, 0xed, 0xd1, 147 0xe1, 0x1f, 0xfa, 0x0c, 0x9f, 0x25, 0x23, 0x44, 0x53, 0xa9, 0xed,
136 0xcb, 0x25, 0x1d, 0x46, 0x10, 0x7f, 0x34, 0xb5, 0x36, 0xad, 0x74, 0x64, 148 0xd1, 0xcb, 0x25, 0x1d, 0x46, 0x10, 0x7f, 0x34, 0xb5, 0x36, 0xad,
137 0x2a, 0x85, 0x84, 0xac, 0xa8, 0xc1, 0xa8, 0xce 149 0x74, 0x64, 0x2a, 0x85, 0x84, 0xac, 0xa8, 0xc1, 0xa8, 0xce};
138 }; 150 const uint8_t SandboxedZipAnalyzerTest::kJSEFileDigest[] = {
151 0x58, 0x91, 0xb5, 0xb5, 0x22, 0xd5, 0xdf, 0x08, 0x6d, 0x0f, 0xf0,
152 0xb1, 0x10, 0xfb, 0xd9, 0xd2, 0x1b, 0xb4, 0xfc, 0x71, 0x63, 0xaf,
153 0x34, 0xd0, 0x82, 0x86, 0xa2, 0xe8, 0x46, 0xf6, 0xbe, 0x03};
139 const SandboxedZipAnalyzerTest::BinaryData 154 const SandboxedZipAnalyzerTest::BinaryData
140 SandboxedZipAnalyzerTest::kUnsignedExe = { 155 SandboxedZipAnalyzerTest::kUnsignedExe = {
141 "unsigned.exe", 156 "unsigned.exe",
142 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE, 157 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE,
143 &kUnsignedDigest[0], 158 &kUnsignedDigest[0],
144 36864, 159 36864,
145 false, // !is_signed 160 false, // !is_signed
146 }; 161 };
147 const SandboxedZipAnalyzerTest::BinaryData 162 const SandboxedZipAnalyzerTest::BinaryData
148 SandboxedZipAnalyzerTest::kSignedExe = { 163 SandboxedZipAnalyzerTest::kSignedExe = {
149 "signed.exe", 164 "signed.exe",
150 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE, 165 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE,
151 &kSignedDigest[0], 166 &kSignedDigest[0],
152 37768, 167 37768,
153 true, // is_signed 168 true, // is_signed
154 }; 169 };
170 const SandboxedZipAnalyzerTest::BinaryData SandboxedZipAnalyzerTest::kJSEFile =
171 {
Alexei Svitkine (slow) 2015/07/31 20:49:36 Nit: Not sure if this is the correct indent format
asanka 2015/07/31 21:13:03 It's a bit odd, but that's what clang-format gives
172 "hello.jse",
173 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE,
174 &kJSEFileDigest[0],
175 6,
176 false, // is_signed
177 };
155 178
156 TEST_F(SandboxedZipAnalyzerTest, NoBinaries) { 179 TEST_F(SandboxedZipAnalyzerTest, NoBinaries) {
157 zip_analyzer::Results results; 180 zip_analyzer::Results results;
158 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_no_binaries.zip"), &results); 181 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_no_binaries.zip"), &results);
159 ASSERT_TRUE(results.success); 182 ASSERT_TRUE(results.success);
160 EXPECT_FALSE(results.has_executable); 183 EXPECT_FALSE(results.has_executable);
161 EXPECT_FALSE(results.has_archive); 184 EXPECT_FALSE(results.has_archive);
162 EXPECT_EQ(0, results.archived_binary.size()); 185 EXPECT_EQ(0, results.archived_binary.size());
163 } 186 }
164 187
(...skipping 13 matching lines...) Expand all
178 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_two_binaries_one_signed.zip"), 201 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_two_binaries_one_signed.zip"),
179 &results); 202 &results);
180 ASSERT_TRUE(results.success); 203 ASSERT_TRUE(results.success);
181 EXPECT_TRUE(results.has_executable); 204 EXPECT_TRUE(results.has_executable);
182 EXPECT_FALSE(results.has_archive); 205 EXPECT_FALSE(results.has_archive);
183 ASSERT_EQ(2, results.archived_binary.size()); 206 ASSERT_EQ(2, results.archived_binary.size());
184 ExpectBinary(kUnsignedExe, results.archived_binary.Get(0)); 207 ExpectBinary(kUnsignedExe, results.archived_binary.Get(0));
185 ExpectBinary(kSignedExe, results.archived_binary.Get(1)); 208 ExpectBinary(kSignedExe, results.archived_binary.Get(1));
186 } 209 }
187 210
211 TEST_F(SandboxedZipAnalyzerTest, ZippedArchiveNoBinaries) {
212 zip_analyzer::Results results;
213 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_archive_no_binaries.zip"),
214 &results);
215 ASSERT_TRUE(results.success);
216 EXPECT_FALSE(results.has_executable);
217 EXPECT_TRUE(results.has_archive);
218 EXPECT_EQ(0, results.archived_binary.size());
219 ASSERT_EQ(1u, results.archived_archive_filetypes.size());
220 EXPECT_EQ(FILE_PATH_LITERAL(".zip"), results.archived_archive_filetypes[0]);
221 }
222
223 TEST_F(SandboxedZipAnalyzerTest, ZippedRarArchiveNoBinaries) {
224 zip_analyzer::Results results;
225 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_rar_archive_no_binaries.zip"),
226 &results);
227 ASSERT_TRUE(results.success);
228 EXPECT_FALSE(results.has_executable);
229 EXPECT_TRUE(results.has_archive);
230 EXPECT_EQ(0, results.archived_binary.size());
231 ASSERT_EQ(1u, results.archived_archive_filetypes.size());
232 EXPECT_EQ(FILE_PATH_LITERAL(".rar"), results.archived_archive_filetypes[0]);
233 }
234
235 TEST_F(SandboxedZipAnalyzerTest, ZippedArchiveAndBinaries) {
236 zip_analyzer::Results results;
237 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_archive_and_binaries.zip"),
238 &results);
239 ASSERT_TRUE(results.success);
240 EXPECT_TRUE(results.has_executable);
241 EXPECT_TRUE(results.has_archive);
242 ASSERT_EQ(1, results.archived_binary.size());
243 ExpectBinary(kSignedExe, results.archived_binary.Get(0));
244 ASSERT_EQ(1u, results.archived_archive_filetypes.size());
245 EXPECT_EQ(FILE_PATH_LITERAL(".7z"), results.archived_archive_filetypes[0]);
246 }
247
248 TEST_F(SandboxedZipAnalyzerTest, ZippedJSEFile) {
249 zip_analyzer::Results results;
250 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_one_jse_file.zip"), &results);
251 ASSERT_TRUE(results.success);
252 EXPECT_TRUE(results.has_executable);
253 EXPECT_FALSE(results.has_archive);
254 ASSERT_EQ(1, results.archived_binary.size());
255 ExpectBinary(kJSEFile, results.archived_binary.Get(0));
256 EXPECT_TRUE(results.archived_archive_filetypes.empty());
257 }
258
188 } // namespace safe_browsing 259 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698