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

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

Issue 2934373002: Record Code Signature of Downloaded DMG files (Closed)
Patch Set: addressing comments Created 3 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/download_protection_service.h" 5 #include "chrome/browser/safe_browsing/download_protection_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 DownloadProtectionService* service, 341 DownloadProtectionService* service,
342 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, 342 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
343 BinaryFeatureExtractor* binary_feature_extractor) 343 BinaryFeatureExtractor* binary_feature_extractor)
344 : item_(item), 344 : item_(item),
345 url_chain_(item->GetUrlChain()), 345 url_chain_(item->GetUrlChain()),
346 referrer_url_(item->GetReferrerUrl()), 346 referrer_url_(item->GetReferrerUrl()),
347 tab_url_(item->GetTabUrl()), 347 tab_url_(item->GetTabUrl()),
348 tab_referrer_url_(item->GetTabReferrerUrl()), 348 tab_referrer_url_(item->GetTabReferrerUrl()),
349 archived_executable_(false), 349 archived_executable_(false),
350 archive_is_valid_(ArchiveValid::UNSET), 350 archive_is_valid_(ArchiveValid::UNSET),
351 #if defined(OS_MACOSX)
352 disk_image_signature_(nullptr),
353 #endif
351 callback_(callback), 354 callback_(callback),
352 service_(service), 355 service_(service),
353 binary_feature_extractor_(binary_feature_extractor), 356 binary_feature_extractor_(binary_feature_extractor),
354 database_manager_(database_manager), 357 database_manager_(database_manager),
355 pingback_enabled_(service_->enabled()), 358 pingback_enabled_(service_->enabled()),
356 finished_(false), 359 finished_(false),
357 type_(ClientDownloadRequest::WIN_EXECUTABLE), 360 type_(ClientDownloadRequest::WIN_EXECUTABLE),
358 start_time_(base::TimeTicks::Now()), 361 start_time_(base::TimeTicks::Now()),
359 skipped_url_whitelist_(false), 362 skipped_url_whitelist_(false),
360 skipped_certificate_whitelist_(false), 363 skipped_certificate_whitelist_(false),
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 else 808 else
806 StartExtractFileFeatures(); 809 StartExtractFileFeatures();
807 } 810 }
808 811
809 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { 812 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) {
810 DCHECK_CURRENTLY_ON(BrowserThread::UI); 813 DCHECK_CURRENTLY_ON(BrowserThread::UI);
811 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); 814 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_);
812 if (!service_) 815 if (!service_)
813 return; 816 return;
814 817
818 if (results.signature_blob.size() > 0) {
819 disk_image_signature_ =
820 base::MakeUnique<std::vector<uint8_t>>(results.signature_blob);
821 }
822
815 // Even if !results.success, some of the DMG may have been parsed. 823 // Even if !results.success, some of the DMG may have been parsed.
816 archive_is_valid_ = 824 archive_is_valid_ =
817 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); 825 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID);
818 archived_executable_ = results.has_executable; 826 archived_executable_ = results.has_executable;
819 archived_binary_.CopyFrom(results.archived_binary); 827 archived_binary_.CopyFrom(results.archived_binary);
820 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() 828 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value()
821 << ", has_executable=" << results.has_executable 829 << ", has_executable=" << results.has_executable
822 << ", success=" << results.success; 830 << ", success=" << results.success;
823 831
824 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( 832 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile(
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 item_->GetUserData(kDownloadReferrerChainDataKey)); 1058 item_->GetUserData(kDownloadReferrerChainDataKey));
1051 if (referrer_chain_data && 1059 if (referrer_chain_data &&
1052 !referrer_chain_data->GetReferrerChain()->empty()) { 1060 !referrer_chain_data->GetReferrerChain()->empty()) {
1053 request.mutable_referrer_chain()->Swap( 1061 request.mutable_referrer_chain()->Swap(
1054 referrer_chain_data->GetReferrerChain()); 1062 referrer_chain_data->GetReferrerChain());
1055 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) 1063 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE)
1056 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( 1064 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain(
1057 request.mutable_referrer_chain()); 1065 request.mutable_referrer_chain());
1058 } 1066 }
1059 1067
1068 #if defined(OS_MACOSX)
1069 UMA_HISTOGRAM_BOOLEAN(
1070 "SBClientDownload."
1071 "DownloadFileHasDmgSignature",
1072 disk_image_signature_ != nullptr);
1073
1074 if (disk_image_signature_) {
1075 request.set_udif_code_signature(disk_image_signature_->data(),
1076 disk_image_signature_->size());
1077 }
1078 #endif
1079
1060 if (archive_is_valid_ != ArchiveValid::UNSET) 1080 if (archive_is_valid_ != ArchiveValid::UNSET)
1061 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); 1081 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID);
1062 request.mutable_signature()->CopyFrom(signature_info_); 1082 request.mutable_signature()->CopyFrom(signature_info_);
1063 if (image_headers_) 1083 if (image_headers_)
1064 request.set_allocated_image_headers(image_headers_.release()); 1084 request.set_allocated_image_headers(image_headers_.release());
1065 if (archived_executable_) 1085 if (archived_executable_)
1066 request.mutable_archived_binary()->Swap(&archived_binary_); 1086 request.mutable_archived_binary()->Swap(&archived_binary_);
1067 if (!request.SerializeToString(&client_download_request_data_)) { 1087 if (!request.SerializeToString(&client_download_request_data_)) {
1068 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); 1088 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO);
1069 return; 1089 return;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 GURL referrer_url_; 1265 GURL referrer_url_;
1246 // URL chain of redirects leading to (but not including) |tab_url|. 1266 // URL chain of redirects leading to (but not including) |tab_url|.
1247 std::vector<GURL> tab_redirects_; 1267 std::vector<GURL> tab_redirects_;
1248 // URL and referrer of the window the download was started from. 1268 // URL and referrer of the window the download was started from.
1249 GURL tab_url_; 1269 GURL tab_url_;
1250 GURL tab_referrer_url_; 1270 GURL tab_referrer_url_;
1251 1271
1252 bool archived_executable_; 1272 bool archived_executable_;
1253 ArchiveValid archive_is_valid_; 1273 ArchiveValid archive_is_valid_;
1254 1274
1275 #if defined(OS_MACOSX)
1276 std::unique_ptr<std::vector<uint8_t>> disk_image_signature_;
1277 #endif
1278
1255 ClientDownloadRequest_SignatureInfo signature_info_; 1279 ClientDownloadRequest_SignatureInfo signature_info_;
1256 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; 1280 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_;
1257 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> 1281 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary>
1258 archived_binary_; 1282 archived_binary_;
1259 CheckDownloadCallback callback_; 1283 CheckDownloadCallback callback_;
1260 // Will be NULL if the request has been canceled. 1284 // Will be NULL if the request has been canceled.
1261 DownloadProtectionService* service_; 1285 DownloadProtectionService* service_;
1262 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; 1286 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_;
1263 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; 1287 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
1264 const bool pingback_enabled_; 1288 const bool pingback_enabled_;
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after
2012 out_request->mutable_referrer_chain()); 2036 out_request->mutable_referrer_chain());
2013 UMA_HISTOGRAM_COUNTS_100( 2037 UMA_HISTOGRAM_COUNTS_100(
2014 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", 2038 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
2015 out_request->referrer_chain_size()); 2039 out_request->referrer_chain_size());
2016 UMA_HISTOGRAM_ENUMERATION( 2040 UMA_HISTOGRAM_ENUMERATION(
2017 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, 2041 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
2018 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 2042 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
2019 } 2043 }
2020 2044
2021 } // namespace safe_browsing 2045 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698