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_info_plugin.h"
52 #include "get_ip_address_plugin.h"
53 #include "get_mac_plugin.h"
54 #include "global_proxy_plugin.h"
55 #include "ienterprise_device_mgr.h"
56 #include "install_plugin.h"
57 #include "iptables_rule_plugin.h"
58 #include "is_wifi_active_plugin.h"
59 #include "location_policy_plugin.h"
60 #include "lock_screen_plugin.h"
61 #include "manage_auto_start_apps_plugin.h"
62 #include "ntp_server_plugin.h"
63 #include "operate_device_plugin.h"
64 #include "password_policy_plugin.h"
65 #include "power_policy_plugin.h"
66 #include "reset_factory_plugin.h"
67 #include "screen_off_time_plugin.h"
68 #include "set_browser_policies_plugin.h"
69 #include "set_wifi_disabled_plugin.h"
70 #include "set_wifi_profile_plugin.h"
71 #include "uninstall_plugin.h"
72 #include "usb_read_only_plugin.h"
73 #include "user_cert_plugin.h"
74 #include "utils.h"
75
76 namespace OHOS {
77 namespace EDM {
78 constexpr int32_t NUM_24 = 24;
79 constexpr int32_t NUM_16 = 16;
80 constexpr int32_t NUM_8 = 8;
81 constexpr int32_t NUM_INDEX_ZERO = 0;
82 constexpr int32_t NUM_INDEX_FIRST = 1;
83 constexpr int32_t NUM_INDEX_SECOND = 2;
84 constexpr int32_t NUM_INDEX_THIRD = 3;
85 constexpr int32_t BYTE_SIZE = 8;
86 constexpr int32_t MAX_STRING_SIZE = 1024;
87 #ifdef OS_ACCOUNT_EDM_ENABLE
88 const bool REGISTER_ADD_OS_ACCOUNT_PLUGIN = PluginManager::GetInstance()->AddPlugin(AddOsAccountPlugin::GetPlugin());
89 #endif
90 const bool REGISTER_ALLOWED_BLUETOOTH_DEVICES_PLUGIN =
91 PluginManager::GetInstance()->AddPlugin(AllowedBluetoothDevicesPlugin::GetPlugin());
92 const bool REGISTER_ALLOWED_INSTALL_BUNDLES_PLUGIN =
93 PluginManager::GetInstance()->AddPlugin(AllowedInstallBundlesPlugin::GetPlugin());
94 const bool REGISTER_ALLOW_USB_DEVICES_PLUGIN =
95 PluginManager::GetInstance()->AddPlugin(AllowUsbDevicesPlugin::GetPlugin());
96 const bool REGISTER_DISABLE_BLUETOOTH_PLUGIN =
97 PluginManager::GetInstance()->AddPlugin(DisableBluetoothPlugin::GetPlugin());
98 const bool REGISTER_DISABLE_HDC_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableHdcPlugin::GetPlugin());
99 const bool REGISTER_DISABLE_MICROPHONE_PLUGIN =
100 PluginManager::GetInstance()->AddPlugin(DisableMicrophonePlugin::GetPlugin());
101 const bool REGISTER_DISABLE_PRINTER_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisablePrinterPlugin::GetPlugin());
102 const bool REGISTER_DISABLE_USB_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableUsbPlugin::GetPlugin());
103 const bool REGISTER_DISABLED_NETWORK_INTERFACE_PLUGIN =
104 PluginManager::GetInstance()->AddPlugin(DisabledNetworkInterfacePlugin::GetPlugin());
105 #ifdef OS_ACCOUNT_EDM_ENABLE
106 const bool REGISTER_DISALLOW_ADD_LOCAL_ACCOUNT_PLUGIN =
107 PluginManager::GetInstance()->AddPlugin(DisallowAddLocalAccountPlugin::GetPlugin());
108 const bool REGISTER_DISALLOW_ADD_OS_ACCOUNT_BY_USER_PLUGIN =
109 PluginManager::GetInstance()->AddPlugin(DisallowAddOsAccountByUserPlugin::GetPlugin());
110 #endif
111 const bool REGISTER_DISALL_MODIFY_DATE_TIME_PLUGIN =
112 PluginManager::GetInstance()->AddPlugin(DisallModifyDateTimePlugin::GetPlugin());
113 const bool REGISTER_DISALLOWED_INSTALL_BUNDLES_PLUGIN =
114 PluginManager::GetInstance()->AddPlugin(DisallowedInstallBundlesPlugin::GetPlugin());
115 const bool REGISTER_DISALLOWED_RUNNING_BUNDLES_PLUGIN =
116 PluginManager::GetInstance()->AddPlugin(DisallowedRunningBundlesPlugin::GetPlugin());
117 const bool REGISTER_DISALLOWED_UNINSTALL_BUNDLES_PLUGIN =
118 PluginManager::GetInstance()->AddPlugin(DisallowedUninstallBundlesPlugin::GetPlugin());
119 const bool REGISTER_DOMAIN_FILTER_RULE_PLUGIN =
120 PluginManager::GetInstance()->AddPlugin(DomainFilterRulePlugin::GetPlugin());
121 #ifdef USERIAM_EDM_ENABLE
122 const bool REGISTER_FINGER_PRINT_AUTH_PLUGIN =
123 PluginManager::GetInstance()->AddPlugin(std::make_shared<FingerprintAuthPlugin>());
124 const bool REGISTER_PASSWORD_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(PasswordPolicyPlugin::GetPlugin());
125 #endif
126 const bool REGISTER_FIREWALL_RULE_PLUGIN = PluginManager::GetInstance()->AddPlugin(FirewallRulePlugin::GetPlugin());
127 const bool REGISTER_GET_ALL_NETWORK_INTERFACES_PLUGIN =
128 PluginManager::GetInstance()->AddPlugin(GetAllNetworkInterfacesPlugin::GetPlugin());
129 const bool REGISTER_GET_BLUETOOTH_INFO_PLUGIN =
130 PluginManager::GetInstance()->AddPlugin(GetBluetoothInfoPlugin::GetPlugin());
131 const bool REGISTER_GET_DEVICE_INFO_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetDeviceInfoPlugin::GetPlugin());
132 const bool REGISTER_GET_IP_ADDRESS_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetIpAddressPlugin::GetPlugin());
133 const bool REGISTER_GET_MAC_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetMacPlugin::GetPlugin());
134 const bool REGISTER_GLOBAL_PROXY_PLUGIN = PluginManager::GetInstance()->AddPlugin(GlobalProxyPlugin::GetPlugin());
135 const bool REGISTER_INSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(InstallPlugin::GetPlugin());
136 const bool REGISTER_IPTABLES_RULE_PLUGIN =
137 PluginManager::GetInstance()->AddPlugin(std::make_shared<IptablesRulePlugin>());
138 const bool REGISTER_IS_WIFI_ACTIVE_PLUGIN = PluginManager::GetInstance()->AddPlugin(IsWifiActivePlugin::GetPlugin());
139 const bool REGISTER_LOCATION_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(LocationPolicyPlugin::GetPlugin());
140 const bool REGISTER_LOCK_SCREEN_PLUGIN = PluginManager::GetInstance()->AddPlugin(LockScreenPlugin::GetPlugin());
141 const bool REGISTER_MANAGE_AUTO_START_APPS_PLUGIN =
142 PluginManager::GetInstance()->AddPlugin(ManageAutoStartAppsPlugin::GetPlugin());
143 const bool REGISTER_NTP_SERVER_PLUGIN = PluginManager::GetInstance()->AddPlugin(NTPServerPlugin::GetPlugin());
144 const bool REGISTER_OPERATE_DEVICE_PLUGIN = PluginManager::GetInstance()->AddPlugin(OperateDevicePlugin::GetPlugin());
145 const bool REGISTER_POWER_POLICY_PLUGIN =
146 PluginManager::GetInstance()->AddPlugin(std::make_shared<PowerPolicyPlugin>());
147 const bool REGISTER_RESET_FACTORY_PLUGIN = PluginManager::GetInstance()->AddPlugin(ResetFactoryPlugin::GetPlugin());
148 const bool REGISTER_SCREEN_OFF_TIME_PLUGIN = PluginManager::GetInstance()->AddPlugin(ScreenOffTimePlugin::GetPlugin());
149 const bool REGISTER_SET_BROWSER_POLICIES_PLUGIN =
150 PluginManager::GetInstance()->AddPlugin(std::make_shared<SetBrowserPoliciesPlugin>());
151 const bool REGISTER_SET_WIFI_DISABLED_PLUGIN =
152 PluginManager::GetInstance()->AddPlugin(SetWifiDisabledPlugin::GetPlugin());
153 const bool REGISTER_SET_WIFI_PROFILE_PLUGIN =
154 PluginManager::GetInstance()->AddPlugin(SetWifiProfilePlugin::GetPlugin());
155 const bool REGISTER_UNINSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(UninstallPlugin::GetPlugin());
156 const bool REGISTER_USB_READ_ONLY_PLUGIN =
157 PluginManager::GetInstance()->AddPlugin(std::make_shared<UsbReadOnlyPlugin>());
158 const bool REGISTER_USER_CERT_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<UserCertPlugin>());
159
OnRemoteRequestFuzzerTest(uint32_t code,const uint8_t * data,size_t size,MessageParcel & parcel)160 void CommonFuzzer::OnRemoteRequestFuzzerTest(uint32_t code, const uint8_t* data, size_t size, MessageParcel& parcel)
161 {
162 TEST::Utils::SetEdmInitialEnv();
163 sptr<EnterpriseDeviceMgrAbility> enterpriseDeviceMgrAbility = EnterpriseDeviceMgrAbility::GetInstance();
164 enterpriseDeviceMgrAbility->OnStart();
165
166 MessageParcel reply;
167 MessageOption option;
168
169 enterpriseDeviceMgrAbility->OnRemoteRequest(code, parcel, reply, option);
170 TEST::Utils::ResetTokenTypeAndUid();
171 }
172
SetParcelContent(MessageParcel & parcel,const uint8_t * data,size_t size)173 void CommonFuzzer::SetParcelContent(MessageParcel& parcel, const uint8_t* data, size_t size)
174 {
175 AppExecFwk::ElementName admin;
176 admin.SetBundleName("com.example.edmtest");
177 admin.SetAbilityName("com.example.edmtest.EnterpriseAdminAbility");
178 parcel.WriteInterfaceToken(IEnterpriseDeviceMgr::GetDescriptor());
179 parcel.WriteParcelable(&admin);
180 parcel.WriteBuffer(data, size);
181 }
182
GetU32Data(const uint8_t * ptr)183 uint32_t CommonFuzzer::GetU32Data(const uint8_t* ptr)
184 {
185 return (ptr[NUM_INDEX_ZERO] << NUM_24) | (ptr[NUM_INDEX_FIRST] << NUM_16) | (ptr[NUM_INDEX_SECOND] << NUM_8) |
186 ptr[NUM_INDEX_THIRD];
187 }
188
GetU32Data(const uint8_t * ptr,int32_t & pos,size_t size)189 int32_t CommonFuzzer::GetU32Data(const uint8_t* ptr, int32_t& pos, size_t size)
190 {
191 if (size <= pos || size - pos < sizeof(int32_t)) {
192 return 0;
193 }
194 int32_t ret = 0;
195 pos += sizeof(int32_t);
196 for (int i = 0; i < sizeof(int32_t); i++) {
197 ret |= ((int32_t)ptr[i] << (BYTE_SIZE * i));
198 }
199 return ret;
200 }
201
GetLong(const uint8_t * ptr,int32_t & pos,size_t size)202 long CommonFuzzer::GetLong(const uint8_t* ptr, int32_t& pos, size_t size)
203 {
204 if (size <= pos || size - pos < sizeof(long)) {
205 return 0;
206 }
207 long ret = 0;
208 pos += sizeof(long);
209 for (int i = 0; i < sizeof(long); i++) {
210 ret |= ((long)ptr[i] << (BYTE_SIZE * i));
211 }
212 return ret;
213 }
214
GetString(const uint8_t * ptr,int32_t & pos,int32_t stringSize,size_t size)215 std::string CommonFuzzer::GetString(const uint8_t* ptr, int32_t& pos, int32_t stringSize, size_t size)
216 {
217 if (size <= pos || size - pos < stringSize) {
218 return nullptr;
219 }
220 stringSize = (stringSize > MAX_STRING_SIZE) ? MAX_STRING_SIZE : stringSize;
221 std::string ret(reinterpret_cast<const char*>(ptr + pos), stringSize);
222 pos += stringSize;
223 return ret;
224 }
225 } // namespace EDM
226 } // namespace OHOS