Ramka zabezpieczeń: zarządzanie konfiguracją | Czynniki
Implementowanie zasad zabezpieczeń zawartości (CSP) i wyłączanie wbudowanego kodu JavaScript
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Wprowadzenie do zasad zabezpieczeń zawartości, dokumentacja zasad zabezpieczeń zawartości, wprowadzenie do zasad zabezpieczeń zawartości, czy mogę używać dostawcy CSP? |
Kroki | Zasady zabezpieczeń zawartości (CSP) to mechanizm zabezpieczeń oparty na zabezpieczeniach, standard W3C, który umożliwia właścicielom aplikacji internetowych kontrolę nad zawartością osadzoną w ich witrynie. Dostawca usług kryptograficznych jest dodawany jako nagłówek odpowiedzi HTTP na serwerze internetowym i jest wymuszany po stronie klienta przez przeglądarki. Jest to dozwolone zasady oparte na liście — witryna internetowa może zadeklarować zestaw zaufanych domen, z których można załadować aktywną zawartość, taką jak JavaScript. Dostawca CSP zapewnia następujące korzyści zabezpieczeń:
|
Przykład
Przykładowe zasady:
Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com
Te zasady umożliwiają ładowanie skryptów tylko z serwera aplikacji internetowej i serwera google analytics. Skrypty załadowane z dowolnej innej witryny zostaną odrzucone. Po włączeniu programu CSP w witrynie internetowej następujące funkcje są automatycznie wyłączone w celu wyeliminowania ataków XSS.
Przykład
Skrypty wbudowane nie będą wykonywane. Poniżej przedstawiono przykłady wbudowanych skryptów
<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);
Przykład
Ciągi nie będą oceniane jako kod.
Example: var str="alert(1)"; eval(str);
Włączanie filtru XSS przeglądarki
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Filtr ochrony XSS |
Kroki | Konfiguracja nagłówka odpowiedzi X-XSS-Protection steruje filtrem skryptu między witrynami przeglądarki. Ten nagłówek odpowiedzi może mieć następujące wartości:
Jest to funkcja Chromium korzystająca z raportów naruszenia CSP w celu wysyłania szczegółów do wybranego identyfikatora URI. Dwie ostatnie opcje są uznawane za bezpieczne wartości. |
ASP.NET aplikacje muszą wyłączyć śledzenie i debugowanie przed wdrożeniem
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | omówienie debugowania ASP.NET, omówienie śledzenia ASP.NET, instrukcje: włączanie śledzenia dla aplikacji ASP.NET, instrukcje: włączanie debugowania dla aplikacji ASP.NET |
Kroki | Po włączeniu śledzenia dla strony każda przeglądarka żądającą jej również uzyskuje informacje śledzenia zawierające dane dotyczące wewnętrznego stanu serwera i przepływu pracy. Te informacje mogą być poufne dla bezpieczeństwa. Po włączeniu debugowania dla strony błędy występujące na serwerze powodują wyświetlenie pełnych danych śledzenia stosu w przeglądarce. Te dane mogą uwidaczniać poufne informacje o przepływie pracy serwera. |
Uzyskiwanie dostępu tylko do skryptów JavaScript innych firm z zaufanych źródeł
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Odwołania do języków JavaScript innych firm powinny być przywołyne tylko z zaufanych źródeł. Punkty końcowe odwołania powinny zawsze znajdować się w protokole TLS. |
Upewnij się, że uwierzytelnione strony ASP.NET zawierają mechanizmy ochrony zadośćuczynienia interfejsu użytkownika lub ochrony za pomocą kliknięć
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | OWASP click-jacking Defense Cheat Sheet, Internet Explorer Internals - Walka kliknięcie-jacking z X-Frame-Options |
Kroki | Klikanie, znane również jako "atak zadośćuczynienia interfejsu użytkownika", polega na tym, że osoba atakująca używa wielu przezroczystych lub nieprzezroczystych warstw, aby skłonić użytkownika do kliknięcia przycisku lub linku na innej stronie, gdy zamierzali kliknąć stronę najwyższego poziomu. Ta warstwa jest osiągana przez utworzenie złośliwej strony za pomocą elementu iframe, który ładuje stronę ofiary. W związku z tym osoba atakująca "przejmuje" kliknięcia przeznaczone dla swojej strony i kieruje je do innej strony, najprawdopodobniej należącej do innej aplikacji, domeny lub obu tych elementów. Aby zapobiec atakom typu click-jacking, ustaw odpowiednie nagłówki odpowiedzi HTTP X-Frame-Options, które instruują przeglądarkę, aby nie zezwalała na tworzenie ramek z innych domen |
Przykład
Nagłówek X-FRAME-OPTIONS można ustawić za pośrednictwem pliku web.config usług IIS. Fragment kodu Web.config dla witryn, które nigdy nie powinny być oprawione:
<system.webServer>
<httpProtocol>
<customHeader>
<add name="X-FRAME-OPTIONS" value="DENY"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Przykład
Kod Web.config dla witryn, które powinny być oprawione tylko przez strony w tej samej domenie:
<system.webServer>
<httpProtocol>
<customHeader>
<add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Upewnij się, że tylko zaufane źródła są dozwolone, jeśli mechanizm CORS jest włączony w usłudze ASP.NET Web Applications
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Web Forms, MVC5 |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. To ograniczenie jest nazywane zasadami tego samego źródła i uniemożliwia złośliwej witrynie odczytywanie poufnych danych z innej witryny. Czasami jednak może być konieczne bezpieczne uwidocznienie interfejsów API, z których mogą korzystać inne witryny. Współużytkowanie zasobów między źródłami (CORS) to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego źródła. Przy użyciu mechanizmu CORS serwer może jawnie zezwalać na niektóre żądania między źródłami podczas odrzucania innych. MECHANIZM CORS jest bezpieczniejszy i bardziej elastyczny niż wcześniejsze techniki, takie jak JSONP. Włączenie mechanizmu CORS przekłada się na dodanie kilku nagłówków odpowiedzi HTTP (Access-Control-*) do aplikacji internetowej i można to zrobić na kilka sposobów. |
Przykład
Jeśli dostęp do pliku Web.config jest dostępny, mechanizm CORS można dodać za pomocą następującego kodu:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="https://example.com" />
</customHeaders>
</httpProtocol>
Przykład
Jeśli dostęp do pliku web.config jest niedostępny, mechanizm CORS można skonfigurować, dodając następujący kod języka C#:
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")
Należy pamiętać, że należy upewnić się, że lista źródeł w atrybucie "Access-Control-Allow-Origin" jest ustawiona na skończony i zaufany zestaw źródeł. Nie można tego niewłaściwie skonfigurować (na przykład ustawienie wartości jako "*") umożliwi złośliwym witrynom wyzwalanie żądań między źródłami do aplikacji internetowej bez żadnych ograniczeń, co naraża aplikację >na ataki CSRF.
Włączanie atrybutu ValidateRequest na stronach ASP.NET
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Web Forms, MVC5 |
Atrybuty | Nie dotyczy |
Dokumentacja | Żądanie weryfikacji — zapobieganie atakom skryptów |
Kroki | Weryfikacja żądania, funkcja ASP.NET od wersji 1.1, zapobiega przyjęciu przez serwer treści zawierającej niezakodowany plik HTML. Ta funkcja została zaprojektowana tak, aby zapobiec atakom z iniekcją skryptów, podczas których kod skrypt klienta lub HTML może być nieświadomie przesłany na serwer, przechowywany i prezentowany innym użytkownikom. Zdecydowanie zaleca się, aby weryfikować wszystkie dane wejściowe i kod HTML zawsze, gdy to konieczne. Weryfikacja żądania jest wykonywana przez porównanie wszystkich danych wejściowych z listą potencjalnie niebezpiecznych wartości. Jeśli wystąpi dopasowanie, ASP.NET zgłasza wartość |
Przykład
Tę funkcję można jednak wyłączyć na poziomie strony:
<%@ Page validateRequest="false" %>
lub na poziomie aplikacji
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
Należy pamiętać, że funkcja walidacji żądania nie jest obsługiwana i nie jest częścią potoku MVC6.
Używanie lokalnie hostowanych najnowszych wersji bibliotek Języka JavaScript
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Deweloperzy korzystający ze standardowych bibliotek Języka JavaScript, takich jak JQuery, muszą używać zatwierdzonych wersji typowych bibliotek Języka JavaScript, które nie zawierają znanych wad zabezpieczeń. Dobrym rozwiązaniem jest użycie najnowszej wersji bibliotek, ponieważ zawierają poprawki zabezpieczeń dla znanych luk w zabezpieczeniach w starszych wersjach. Jeśli nie można użyć najnowszej wersji ze względu na zgodność, należy użyć poniższych minimalnych wersji. Dopuszczalne wersje minimalne:
Nigdy nie załaduj żadnej biblioteki Języka JavaScript z witryn zewnętrznych, takich jak publiczne sieci CDN |
Wyłączanie automatycznego wąchania MIME
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Część Zabezpieczeń IE8 V: kompleksowa ochrona, typ MIME |
Kroki | Nagłówek X-Content-Type-Options to nagłówek HTTP, który umożliwia deweloperom określenie, że ich zawartość nie powinna być wyśmiewane przez protokół MIME. Ten nagłówek jest przeznaczony do eliminowania ataków MIME-Sniffing. Dla każdej strony, która może zawierać zawartość z możliwością sterowania przez użytkownika, należy użyć nagłówka HTTP X-Content-Type-Options:nosniff. Aby włączyć wymagany nagłówek globalnie dla wszystkich stron w aplikacji, możesz wykonać jedną z następujących czynności |
Przykład
Dodaj nagłówek w pliku web.config, jeśli aplikacja jest hostowana przez usługi Internet Information Services (IIS) 7.
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Przykład
Dodawanie nagłówka za pośrednictwem Application_BeginRequest globalnej
void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}
Przykład
Implementowanie niestandardowego modułu HTTP
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");
}
}
Przykład
Wymagany nagłówek można włączyć tylko dla określonych stron, dodając go do poszczególnych odpowiedzi:
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
Usuwanie standardowych nagłówków serwera w witrynach sieci Web platformy Windows Azure, aby uniknąć odcisku palca
Tytuł | Szczegóły |
---|---|
Składnik | Aplikacja internetowa |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | EnvironmentType — Azure |
Dokumentacja | Removing standard server headers on Windows Azure Web Sites (Usuwanie standardowych nagłówków serwera w witrynach sieci Web platformy Windows Azure) |
Kroki | Nagłówki, takie jak Server, X-Powered-By, X-AspNet-Version ujawniają informacje o serwerze i podstawowych technologiach. Zaleca się pomijanie tych nagłówków, zapobiegając tym samym odciskom palca aplikacji |
Konfigurowanie zapory systemu Windows pod kątem dostępu do aparatu bazy danych
Tytuł | Szczegóły |
---|---|
Składnik | baza danych |
Faza SDL | Kompilacja |
Odpowiednie technologie | Usługi SQL Azure, OnPrem |
Atrybuty | N/A, wersja SQL — wersja 12 |
Dokumentacja | Jak skonfigurować zaporę usługi Azure SQL Database, skonfigurować zaporę systemu Windows na potrzeby dostępu do aparatu bazy danych |
Kroki | Systemy zapory zapobiegają nieautoryzowanemu dostępowi do zasobów komputera. Aby uzyskać dostęp do wystąpienia aparatu bazy danych programu SQL Server za pośrednictwem zapory, należy skonfigurować zaporę na komputerze z uruchomionym programem SQL Server, aby zezwolić na dostęp |
Upewnij się, że tylko zaufane źródła są dozwolone, jeśli mechanizm CORS jest włączony w interfejsie API sieci Web ASP.NET
Tytuł | Szczegóły |
---|---|
Składnik | Internetowy interfejs API |
Faza SDL | Kompilacja |
Odpowiednie technologie | MVC 5 |
Atrybuty | Nie dotyczy |
Dokumentacja | Włączanie żądań między źródłami w internetowym interfejsie API 2 ASP.NET ASP.NET internetowego interfejsu API — obsługa mechanizmu CORS w internetowym interfejsie API 2 ASP.NET |
Kroki | Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. To ograniczenie jest nazywane zasadami tego samego źródła i uniemożliwia złośliwej witrynie odczytywanie poufnych danych z innej witryny. Czasami jednak może być konieczne bezpieczne uwidocznienie interfejsów API, z których mogą korzystać inne witryny. Współużytkowanie zasobów między źródłami (CORS) to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego źródła. Przy użyciu mechanizmu CORS serwer może jawnie zezwalać na niektóre żądania między źródłami podczas odrzucania innych. MECHANIZM CORS jest bezpieczniejszy i bardziej elastyczny niż wcześniejsze techniki, takie jak JSONP. |
Przykład
W App_Start/WebApiConfig.cs dodaj następujący kod do metody 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 }
);
}
}
}
Przykład
Atrybut EnableCors można zastosować do metod akcji w kontrolerze w następujący sposób:
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);
}
}
Należy pamiętać, że ważne jest, aby upewnić się, że lista źródeł w atrybucie EnableCors jest ustawiona na skończony i zaufany zestaw źródeł. Nie można tego niewłaściwie skonfigurować (na przykład ustawienie wartości jako "*") umożliwi złośliwym witrynom wyzwalanie żądań między źródłami do interfejsu API bez żadnych ograniczeń, >co naraża interfejs API na ataki CSRF. Funkcja EnableCors może być ozdobiona na poziomie kontrolera.
Przykład
Aby wyłączyć mechanizm CORS dla określonej metody w klasie, można użyć atrybutu DisableCors, jak pokazano poniżej:
[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);
}
}
Tytuł | Szczegóły |
---|---|
Składnik | Internetowy interfejs API |
Faza SDL | Kompilacja |
Odpowiednie technologie | MVC 6 |
Atrybuty | Nie dotyczy |
Dokumentacja | Włączanie żądań między źródłami (CORS) w ASP.NET Core 1.0 |
Kroki | W ASP.NET Core 1.0 mechanizm CORS można włączyć za pomocą oprogramowania pośredniczącego lub mvC. W przypadku używania wzorca MVC do włączania mechanizmu CORS są używane te same usługi CORS, ale oprogramowanie pośredniczące CORS nie jest. |
Metoda 1 Włączanie mechanizmu CORS z oprogramowaniem pośredniczącym: aby włączyć mechanizm CORS dla całej aplikacji, dodaj oprogramowanie pośredniczące CORS do potoku żądania przy użyciu metody rozszerzenia UseCors. Zasady między źródłami można określić podczas dodawania oprogramowania pośredniczącego CORS przy użyciu klasy CorsPolicyBuilder. Istnieją dwa sposoby wykonania tej czynności:
Przykład
Pierwszym z nich jest wywołanie metody UseCors z lambdą. Lambda przyjmuje obiekt 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"));
}
Przykład
Drugi to zdefiniowanie co najmniej jednej nazwanej zasady MECHANIZMU CORS, a następnie wybranie zasad według nazwy w czasie wykonywania.
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!");
});
}
Podejście 2 Włączanie mechanizmu CORS w mvC: deweloperzy mogą też użyć wzorca MVC do zastosowania określonych mechanizmów CORS na akcję, na kontroler lub globalnie dla wszystkich kontrolerów.
Przykład
Na akcję: Aby określić zasady CORS dla określonej akcji, dodaj atrybut [EnableCors] do akcji. Określ nazwę zasad.
public class HomeController : Controller
{
[EnableCors("AllowSpecificOrigin")]
public IActionResult Index()
{
return View();
}
Przykład
Na kontroler:
[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{
Przykład
Globalnie:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
});
}
Należy pamiętać, że ważne jest, aby upewnić się, że lista źródeł w atrybucie EnableCors jest ustawiona na skończony i zaufany zestaw źródeł. Nie można tego niewłaściwie skonfigurować (na przykład ustawienie wartości jako "*") umożliwi złośliwym witrynom wyzwalanie żądań między źródłami do interfejsu API bez żadnych ograniczeń, >co naraża interfejs API na ataki CSRF.
Przykład
Aby wyłączyć mechanizm CORS dla kontrolera lub akcji, użyj atrybutu [DisableCors].
[DisableCors]
public IActionResult About()
{
return View();
}
Szyfrowanie sekcji plików konfiguracji internetowego interfejsu API zawierających poufne dane
Tytuł | Szczegóły |
---|---|
Składnik | Internetowy interfejs API |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Instrukcje: szyfrowanie sekcji konfiguracji w programie ASP.NET 2.0 przy użyciu interfejsu DPAPI, określanie chronionego dostawcy konfiguracji przy użyciu usługi Azure Key Vault do ochrony wpisów tajnych aplikacji |
Kroki | Pliki konfiguracji, takie jak Web.config, appsettings.json są często używane do przechowywania poufnych informacji, w tym nazw użytkowników, haseł, parametry połączenia bazy danych i kluczy szyfrowania. Jeśli te informacje nie są chronione, aplikacja jest podatna na ataki lub złośliwych użytkowników uzyskujących poufne informacje, takie jak nazwy użytkowników konta i hasła, nazwy baz danych i nazwy serwerów. Na podstawie typu wdrożenia (azure/on-prem) szyfruj poufne sekcje plików konfiguracji przy użyciu interfejsu DPAPI lub usług, takich jak Azure Key Vault. |
Upewnij się, że wszystkie interfejsy administracyjne są zabezpieczone przy użyciu silnych poświadczeń
Tytuł | Szczegóły |
---|---|
Składnik | Urządzenie IoT |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Wszystkie interfejsy administracyjne udostępniane przez bramę urządzenia lub pola powinny być zabezpieczone przy użyciu silnych poświadczeń. Ponadto wszystkie inne uwidocznione interfejsy, takie jak WiFi, SSH, udziały plików, FTP, powinny być zabezpieczone przy użyciu silnych poświadczeń. Nie należy używać domyślnych słabych haseł. |
Upewnij się, że nieznany kod nie może zostać wykonany na urządzeniach
Tytuł | Szczegóły |
---|---|
Składnik | Urządzenie IoT |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Włączanie bezpiecznego rozruchu i szyfrowania urządzeń funkcją BitLocker w systemie Windows 10 IoT Core |
Kroki | Bezpieczny rozruch UEFI ogranicza system do zezwalania na wykonywanie plików binarnych podpisanych przez określony urząd. Ta funkcja uniemożliwia wykonywanie nieznanego kodu na platformie i potencjalnie osłabianie stanu zabezpieczeń. Włącz bezpieczny rozruch UEFI i ogranicz listę urzędów certyfikacji, które są zaufane do podpisywania kodu. Podpisz cały kod wdrożony na urządzeniu przy użyciu jednego z zaufanych urzędów. |
Szyfrowanie systemu operacyjnego i innych partycji urządzenia IoT za pomocą funkcji BitLocker
Tytuł | Szczegóły |
---|---|
Składnik | Urządzenie IoT |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | System Windows 10 IoT Core implementuje uproszczoną wersję szyfrowania urządzeń funkcją BitLocker, która ma silną zależność od obecności modułu TPM na platformie, w tym niezbędnego protokołu preOS w interfejsie UEFI, który przeprowadza niezbędne pomiary. Te pomiary preOS zapewniają, że system operacyjny ma później ostateczny rekord sposobu uruchamiania systemu operacyjnego. Szyfruj partycje systemu operacyjnego przy użyciu funkcji BitLocker i innych partycji również w przypadku przechowywania poufnych danych. |
Upewnij się, że na urządzeniach są włączone tylko minimalne usługi/funkcje
Tytuł | Szczegóły |
---|---|
Składnik | Urządzenie IoT |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Nie włączaj ani nie wyłączaj żadnych funkcji ani usług w systemie operacyjnym, które nie są wymagane do działania rozwiązania. Jeśli na przykład urządzenie nie wymaga wdrożenia interfejsu użytkownika, zainstaluj system Windows IoT Core w trybie bezgłówkowym. |
Szyfrowanie systemu operacyjnego i innych partycji bramy pola IoT za pomocą funkcji BitLocker
Tytuł | Szczegóły |
---|---|
Składnik | Brama pola IoT |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | System Windows 10 IoT Core implementuje uproszczoną wersję szyfrowania urządzeń funkcją BitLocker, która ma silną zależność od obecności modułu TPM na platformie, w tym niezbędnego protokołu preOS w interfejsie UEFI, który przeprowadza niezbędne pomiary. Te pomiary preOS zapewniają, że system operacyjny ma później ostateczny rekord sposobu uruchamiania systemu operacyjnego. Szyfruj partycje systemu operacyjnego przy użyciu funkcji BitLocker i innych partycji również w przypadku przechowywania poufnych danych. |
Upewnij się, że domyślne poświadczenia logowania bramy pola zostały zmienione podczas instalacji
Tytuł | Szczegóły |
---|---|
Składnik | Brama pola IoT |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Upewnij się, że domyślne poświadczenia logowania bramy pola zostały zmienione podczas instalacji |
Upewnij się, że brama w chmurze implementuje proces, aby zapewnić aktualność oprogramowania układowego połączonych urządzeń
Tytuł | Szczegóły |
---|---|
Składnik | Brama chmury IoT |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Wybór bramy — Azure IoT Hub |
Dokumentacja | Omówienie usługi IoT Hub Zarządzanie urządzeniami,Samouczek dotyczący aktualizacji urządzenia dla usługi Azure IoT Hub przy użyciu obrazu referencyjnego urządzenia Raspberry Pi 3 B+. |
Kroki | LWM2M to protokół z Zarządzanie urządzeniami Open Mobile Alliance for IoT. Zarządzanie urządzeniami usługi Azure IoT umożliwia interakcję z urządzeniami fizycznymi przy użyciu zadań urządzeń. Upewnij się, że brama w chmurze implementuje proces, aby rutynowo przechowywać urządzenie i inne dane konfiguracji przy użyciu usługi Azure IoT Hub Zarządzanie urządzeniami. |
Upewnij się, że urządzenia mają skonfigurowane mechanizmy zabezpieczeń punktu końcowego zgodnie z zasadami organizacji
Tytuł | Szczegóły |
---|---|
Składnik | Granica zaufania maszyny |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Nie dotyczy |
Kroki | Upewnij się, że urządzenia mają mechanizmy zabezpieczeń punktu końcowego, takie jak funkcja BitLocker na potrzeby szyfrowania na poziomie dysku, oprogramowanie antywirusowe ze zaktualizowanymi sygnaturami, zapora oparta na hoście, uaktualnienia systemu operacyjnego, zasady grupy itp. są konfigurowane zgodnie z zasadami zabezpieczeń organizacji. |
Zapewnianie bezpiecznego zarządzania kluczami dostępu do usługi Azure Storage
Tytuł | Szczegóły |
---|---|
Składnik | Azure Storage |
Faza SDL | Wdrożenie |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Przewodnik po zabezpieczeniach usługi Azure Storage — zarządzanie kluczami konta magazynu |
Kroki | Magazyn kluczy: zaleca się przechowywanie kluczy dostępu usługi Azure Storage w usłudze Azure Key Vault jako wpisu tajnego i pobranie klucza z magazynu kluczy przez aplikacje. Jest to zalecane z następujących powodów:
|
Upewnij się, że tylko zaufane źródła są dozwolone, jeśli mechanizm CORS jest włączony w usłudze Azure Storage
Tytuł | Szczegóły |
---|---|
Składnik | Azure Storage |
Faza SDL | Kompilacja |
Odpowiednie technologie | Ogólna |
Atrybuty | Nie dotyczy |
Dokumentacja | Pomoc techniczna dotycząca mechanizmu CORS dla usług Azure Storage |
Kroki | Usługa Azure Storage umożliwia włączenie mechanizmu CORS — współużytkowania zasobów między źródłami. Dla każdego konta magazynu można określić domeny, które mogą uzyskiwać dostęp do zasobów na tym koncie magazynu. Domyślnie mechanizm CORS jest wyłączony we wszystkich usługach. Mechanizm CORS można włączyć przy użyciu interfejsu API REST lub biblioteki klienta magazynu w celu wywołania jednej z metod ustawiania zasad usługi. |
Włączanie funkcji ograniczania usługi WCF
Tytuł | Szczegóły |
---|---|
Składnik | WCF |
Faza SDL | Kompilacja |
Odpowiednie technologie | .NET Framework 3 |
Atrybuty | Nie dotyczy |
Dokumentacja | MSDN, Fortify Kingdom |
Kroki | Nie kładąc limitu użycia zasobów systemowych, mogą spowodować wyczerpanie zasobów i ostatecznie odmowę usługi.
|
Przykład
Poniżej przedstawiono przykładową konfigurację z włączonym ograniczaniem przepustowości:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="Throttled">
<serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" />
...
</system.serviceModel>
Ujawnienie informacji w programie WCF za pośrednictwem metadanych
Tytuł | Szczegóły |
---|---|
Składnik | WCF |
Faza SDL | Kompilacja |
Odpowiednie technologie | .NET Framework 3 |
Atrybuty | Nie dotyczy |
Dokumentacja | MSDN, Fortify Kingdom |
Kroki | Metadane mogą pomóc osobom atakującym poznać system i zaplanować formę ataku. Usługi WCF można skonfigurować pod kątem uwidaczniania metadanych. Metadane zawierają szczegółowe informacje o opisie usługi i nie powinny być emitowane w środowiskach produkcyjnych. HttpGetEnabled / HttpsGetEnabled Właściwości klasy ServiceMetaData określają, czy usługa uwidacznia metadane |
Przykład
Poniższy kod instruuje program WCF, aby rozgłaszał metadane usługi
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri(EndPointAddress);
Host.Description.Behaviors.Add(smb);
Nie emituj metadanych usługi w środowisku produkcyjnym. Ustaw właściwości HttpGetEnabled/ HttpsGetEnabled klasy ServiceMetaData na false.
Przykład
Poniższy kod instruuje program WCF, aby nie emitował metadanych usługi.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = false;
smb.HttpGetUrl = new Uri(EndPointAddress);
Host.Description.Behaviors.Add(smb);