1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "common_fuzzer.h"
17
18 #include <system_ability_definition.h>
19
20 #define protected public
21 #define private public
22 #include "enterprise_device_mgr_ability.h"
23 #undef protected
24 #undef private
25 #ifdef OS_ACCOUNT_EDM_ENABLE
26 #include "add_os_account_plugin.h"
27 #endif
28 #include "allowed_bluetooth_devices_plugin.h"
29 #include "allowed_install_bundles_plugin.h"
30 #include "allowed_usb_devices_plugin.h"
31 #include "disable_bluetooth_plugin.h"
32 #include "disable_hdc_plugin.h"
33 #include "disable_microphone_plugin.h"
34 #include "disable_printer_plugin.h"
35 #include "disable_usb_plugin.h"
36 #include "disabled_network_interface_plugin.h"
37 #ifdef OS_ACCOUNT_EDM_ENABLE
38 #include "disallow_add_local_account_plugin.h"
39 #include "disallow_add_os_account_by_user_plugin.h"
40 #endif
41 #include "disallow_modify_datetime_plugin.h"
42 #include "disallowed_install_bundles_plugin.h"
43 #include "disallowed_running_bundles_plugin.h"
44 #include "disallowed_uninstall_bundles_plugin.h"
45 #include "domain_filter_rule_plugin.h"
46 #include "fingerprint_auth_plugin.h"
47 #include "firewall_rule_plugin.h"
48 #include "func_code.h"
49 #include "get_all_network_interfaces_plugin.h"
50 #include "get_bluetooth_info_plugin.h"
51 #include "get_device_encryption_status_plugin.h"
52 #include "get_device_info_plugin.h"
53 #include "get_display_version_plugin.h"
54 #include "get_ip_address_plugin.h"
55 #include "get_mac_plugin.h"
56 #include "get_security_patch_tag_plugin.h"
57 #include "global_proxy_plugin.h"
58 #include "ienterprise_device_mgr.h"
59 #include "install_plugin.h"
60 #include "iptables_rule_plugin.h"
61 #include "is_wifi_active_plugin.h"
62 #include "location_policy_plugin.h"
63 #include "lock_screen_plugin.h"
64 #include "manage_auto_start_apps_plugin.h"
65 #include "ntp_server_plugin.h"
66 #include "operate_device_plugin.h"
67 #include "password_policy_plugin.h"
68 #include "power_policy_plugin.h"
69 #include "reset_factory_plugin.h"
70 #include "screen_off_time_plugin.h"
71 #include "set_browser_policies_plugin.h"
72 #include "set_wifi_disabled_plugin.h"
73 #include "set_wifi_profile_plugin.h"
74 #include "uninstall_plugin.h"
75 #include "usb_read_only_plugin.h"
76 #include "user_cert_plugin.h"
77 #include "utils.h"
78
79 namespace OHOS {
80 namespace EDM {
81 constexpr int32_t NUM_24 = 24;
82 constexpr int32_t NUM_16 = 16;
83 constexpr int32_t NUM_8 = 8;
84 constexpr int32_t NUM_INDEX_ZERO = 0;
85 constexpr int32_t NUM_INDEX_FIRST = 1;
86 constexpr int32_t NUM_INDEX_SECOND = 2;
87 constexpr int32_t NUM_INDEX_THIRD = 3;
88 constexpr int32_t BYTE_SIZE = 8;
89 constexpr int32_t MAX_STRING_SIZE = 1024;
90 #ifdef OS_ACCOUNT_EDM_ENABLE
91 const bool REGISTER_ADD_OS_ACCOUNT_PLUGIN = PluginManager::GetInstance()->AddPlugin(AddOsAccountPlugin::GetPlugin());
92 #endif
93 const bool REGISTER_ALLOWED_BLUETOOTH_DEVICES_PLUGIN =
94 PluginManager::GetInstance()->AddPlugin(AllowedBluetoothDevicesPlugin::GetPlugin());
95 const bool REGISTER_ALLOWED_INSTALL_BUNDLES_PLUGIN =
96 PluginManager::GetInstance()->AddPlugin(AllowedInstallBundlesPlugin::GetPlugin());
97 const bool REGISTER_ALLOW_USB_DEVICES_PLUGIN =
98 PluginManager::GetInstance()->AddPlugin(AllowUsbDevicesPlugin::GetPlugin());
99 const bool REGISTER_DISABLE_BLUETOOTH_PLUGIN =
100 PluginManager::GetInstance()->AddPlugin(DisableBluetoothPlugin::GetPlugin());
101 const bool REGISTER_DISABLE_HDC_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableHdcPlugin::GetPlugin());
102 const bool REGISTER_DISABLE_MICROPHONE_PLUGIN =
103 PluginManager::GetInstance()->AddPlugin(DisableMicrophonePlugin::GetPlugin());
104 const bool REGISTER_DISABLE_PRINTER_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisablePrinterPlugin::GetPlugin());
105 const bool REGISTER_DISABLE_USB_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableUsbPlugin::GetPlugin());
106 const bool REGISTER_DISABLED_NETWORK_INTERFACE_PLUGIN =
107 PluginManager::GetInstance()->AddPlugin(DisabledNetworkInterfacePlugin::GetPlugin());
108 #ifdef OS_ACCOUNT_EDM_ENABLE
109 const bool REGISTER_DISALLOW_ADD_LOCAL_ACCOUNT_PLUGIN =
110 PluginManager::GetInstance()->AddPlugin(DisallowAddLocalAccountPlugin::GetPlugin());
111 const bool REGISTER_DISALLOW_ADD_OS_ACCOUNT_BY_USER_PLUGIN =
112 PluginManager::GetInstance()->AddPlugin(DisallowAddOsAccountByUserPlugin::GetPlugin());
113 #endif
114 const bool REGISTER_DISALL_MODIFY_DATE_TIME_PLUGIN =
115 PluginManager::GetInstance()->AddPlugin(DisallModifyDateTimePlugin::GetPlugin());
116 const bool REGISTER_DISALLOWED_INSTALL_BUNDLES_PLUGIN =
117 PluginManager::GetInstance()->AddPlugin(DisallowedInstallBundlesPlugin::GetPlugin());
118 const bool REGISTER_DISALLOWED_RUNNING_BUNDLES_PLUGIN =
119 PluginManager::GetInstance()->AddPlugin(DisallowedRunningBundlesPlugin::GetPlugin());
120 const bool REGISTER_DISALLOWED_UNINSTALL_BUNDLES_PLUGIN =
121 PluginManager::GetInstance()->AddPlugin(DisallowedUninstallBundlesPlugin::GetPlugin());
122 const bool REGISTER_DOMAIN_FILTER_RULE_PLUGIN =
123 PluginManager::GetInstance()->AddPlugin(DomainFilterRulePlugin::GetPlugin());
124 #ifdef USERIAM_EDM_ENABLE
125 const bool REGISTER_FINGER_PRINT_AUTH_PLUGIN =
126 PluginManager::GetInstance()->AddPlugin(std::make_shared<FingerprintAuthPlugin>());
127 const bool REGISTER_PASSWORD_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(PasswordPolicyPlugin::GetPlugin());
128 #endif
129 const bool REGISTER_FIREWALL_RULE_PLUGIN = PluginManager::GetInstance()->AddPlugin(FirewallRulePlugin::GetPlugin());
130 const bool REGISTER_GET_ALL_NETWORK_INTERFACES_PLUGIN =
131 PluginManager::GetInstance()->AddPlugin(GetAllNetworkInterfacesPlugin::GetPlugin());
132 const bool REGISTER_GET_BLUETOOTH_INFO_PLUGIN =
133 PluginManager::GetInstance()->AddPlugin(GetBluetoothInfoPlugin::GetPlugin());
134 const bool REGISTER_GET_DEVICE_ENCRYPTION_STATUS_PLUGIN =
135 PluginManager::GetInstance()->AddPlugin(GetDeviceEncryptionStatusPlugin::GetPlugin());
136 const bool REGISTER_GET_DEVICE_INFO_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetDeviceInfoPlugin::GetPlugin());
137 const bool REGISTER_GET_DISPLAY_VERSION_PLUGIN =
138 PluginManager::GetInstance()->AddPlugin(GetDisplayVersionPlugin::GetPlugin());
139 const bool REGISTER_GET_IP_ADDRESS_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetIpAddressPlugin::GetPlugin());
140 const bool REGISTER_GET_MAC_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetMacPlugin::GetPlugin());
141 const bool REGISTER_GET_SECURITY_PATCH_TAG_PLUGIN =
142 PluginManager::GetInstance()->AddPlugin(GetSecurityPatchTagPlugin::GetPlugin());
143 const bool REGISTER_GLOBAL_PROXY_PLUGIN = PluginManager::GetInstance()->AddPlugin(GlobalProxyPlugin::GetPlugin());
144 const bool REGISTER_INSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(InstallPlugin::GetPlugin());
145 const bool REGISTER_IPTABLES_RULE_PLUGIN =
146 PluginManager::GetInstance()->AddPlugin(std::make_shared<IptablesRulePlugin>());
147 const bool REGISTER_IS_WIFI_ACTIVE_PLUGIN = PluginManager::GetInstance()->AddPlugin(IsWifiActivePlugin::GetPlugin());
148 const bool REGISTER_LOCATION_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(LocationPolicyPlugin::GetPlugin());
149 const bool REGISTER_LOCK_SCREEN_PLUGIN = PluginManager::GetInstance()->AddPlugin(LockScreenPlugin::GetPlugin());
150 const bool REGISTER_MANAGE_AUTO_START_APPS_PLUGIN =
151 PluginManager::GetInstance()->AddPlugin(ManageAutoStartAppsPlugin::GetPlugin());
152 const bool REGISTER_NTP_SERVER_PLUGIN = PluginManager::GetInstance()->AddPlugin(NTPServerPlugin::GetPlugin());
153 const bool REGISTER_OPERATE_DEVICE_PLUGIN = PluginManager::GetInstance()->AddPlugin(OperateDevicePlugin::GetPlugin());
154 const bool REGISTER_POWER_POLICY_PLUGIN =
155 PluginManager::GetInstance()->AddPlugin(std::make_shared<PowerPolicyPlugin>());
156 const bool REGISTER_RESET_FACTORY_PLUGIN = PluginManager::GetInstance()->AddPlugin(ResetFactoryPlugin::GetPlugin());
157 const bool REGISTER_SCREEN_OFF_TIME_PLUGIN = PluginManager::GetInstance()->AddPlugin(ScreenOffTimePlugin::GetPlugin());
158 const bool REGISTER_SET_BROWSER_POLICIES_PLUGIN =
159 PluginManager::GetInstance()->AddPlugin(std::make_shared<SetBrowserPoliciesPlugin>());
160 const bool REGISTER_SET_WIFI_DISABLED_PLUGIN =
161 PluginManager::GetInstance()->AddPlugin(SetWifiDisabledPlugin::GetPlugin());
162 const bool REGISTER_SET_WIFI_PROFILE_PLUGIN =
163 PluginManager::GetInstance()->AddPlugin(SetWifiProfilePlugin::GetPlugin());
164 const bool REGISTER_UNINSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(UninstallPlugin::GetPlugin());
165 const bool REGISTER_USB_READ_ONLY_PLUGIN =
166 PluginManager::GetInstance()->AddPlugin(std::make_shared<UsbReadOnlyPlugin>());
167 const bool REGISTER_USER_CERT_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<UserCertPlugin>());
168
OnRemoteRequestFuzzerTest(uint32_t code, const uint8_t* data, size_t size, MessageParcel& parcel)169 void CommonFuzzer::OnRemoteRequestFuzzerTest(uint32_t code, const uint8_t* data, size_t size, MessageParcel& parcel)
170 {
171 TEST::Utils::SetEdmInitialEnv();
172 sptr<EnterpriseDeviceMgrAbility> enterpriseDeviceMgrAbility = EnterpriseDeviceMgrAbility::GetInstance();
173 enterpriseDeviceMgrAbility->OnStart();
174
175 MessageParcel reply;
176 MessageOption option;
177
178 enterpriseDeviceMgrAbility->OnRemoteRequest(code, parcel, reply, option);
179 TEST::Utils::ResetTokenTypeAndUid();
180 }
181
SetParcelContent(MessageParcel& parcel, const uint8_t* data, size_t size)182 void CommonFuzzer::SetParcelContent(MessageParcel& parcel, const uint8_t* data, size_t size)
183 {
184 AppExecFwk::ElementName admin;
185 admin.SetBundleName("com.example.edmtest");
186 admin.SetAbilityName("com.example.edmtest.EnterpriseAdminAbility");
187 parcel.WriteInterfaceToken(IEnterpriseDeviceMgr::GetDescriptor());
188 parcel.WriteParcelable(&admin);
189 parcel.WriteBuffer(data, size);
190 }
191
GetU32Data(const uint8_t* ptr)192 uint32_t CommonFuzzer::GetU32Data(const uint8_t* ptr)
193 {
194 return (ptr[NUM_INDEX_ZERO] << NUM_24) | (ptr[NUM_INDEX_FIRST] << NUM_16) | (ptr[NUM_INDEX_SECOND] << NUM_8) |
195 ptr[NUM_INDEX_THIRD];
196 }
197
GetU32Data(const uint8_t* ptr, int32_t& pos, size_t size)198 int32_t CommonFuzzer::GetU32Data(const uint8_t* ptr, int32_t& pos, size_t size)
199 {
200 if (size <= pos || size - pos < sizeof(int32_t)) {
201 return 0;
202 }
203 int32_t ret = 0;
204 pos += sizeof(int32_t);
205 for (int i = 0; i < sizeof(int32_t); i++) {
206 ret |= ((int32_t)ptr[i] << (BYTE_SIZE * i));
207 }
208 return ret;
209 }
210
GetLong(const uint8_t* ptr, int32_t& pos, size_t size)211 long CommonFuzzer::GetLong(const uint8_t* ptr, int32_t& pos, size_t size)
212 {
213 if (size <= pos || size - pos < sizeof(long)) {
214 return 0;
215 }
216 long ret = 0;
217 pos += sizeof(long);
218 for (int i = 0; i < sizeof(long); i++) {
219 ret |= ((long)ptr[i] << (BYTE_SIZE * i));
220 }
221 return ret;
222 }
223
GetString(const uint8_t* ptr, int32_t& pos, int32_t stringSize, size_t size)224 std::string CommonFuzzer::GetString(const uint8_t* ptr, int32_t& pos, int32_t stringSize, size_t size)
225 {
226 if (size <= pos || size - pos < stringSize) {
227 return nullptr;
228 }
229 stringSize = (stringSize > MAX_STRING_SIZE) ? MAX_STRING_SIZE : stringSize;
230 std::string ret(reinterpret_cast<const char*>(ptr + pos), stringSize);
231 pos += stringSize;
232 return ret;
233 }
234 } // namespace EDM
235 } // namespace OHOS