eDiscovery is an activity based on seeking answers to questions. Who did something and when did they do it? Who was involved? How were they involved? Where is the evidence and how strong is the evidence? And so on.
Lots of Data to Search
When it comes to performing eDiscovery in a Microsoft 365 tenant, a lot of data is available to search to find answers. The two basic workloads, Exchange Online and SharePoint Online, began adding compliance features in their 2010 on-premises versions. The on-premises technology is now largely superseded by newer and more capable cloud-specific implementations in the Office 365 data governance framework. For example, content searches are much faster and more capable than their on-premises counterparts because they can search multiple locations. Retention policies make sure that all workloads keep information based on the same criteria. Some older methods, like Exchange litigation holds, continue in use, but overall, Office 365 is a good place to go hunting for information.
Compliance Records for Communications
An increasing number of organizations use Teams for internal communications, many of which replacing Skype for Business Online in advance of Microsoft retiring that app on July 31, 2021. Anyone working in eDiscovery needs to understand how the two applications record information that might turn up in searches. As summarized in Table 1, both Skype for Business Online and Teams capture records for text-based communications (Skype calls these IM, Teams uses chats or conversations). Neither application captures compliance records for video or audio content. Note that the location of the Teams compliance records changed in 2020.
Application
Mailbox folder
Visible to Clients
Record type
Skype for Business Online
Conversation History
Yes
Threaded transcript
Teams Chats
TeamsMessagesData (personal mailbox)
No
Individual items
Teams Channel Conversations
TeamsMessagesData (group mailbox)
No
Individual Items
Table 1: Comparing Skype for Business Online and Teams for compliance record capture
The TeamsMessagesData folder is part of the non-IPM section of mailboxes and is only available online. You can use the PowerShell Get-ExoMailboxFolderStatistics cmdlet to check the number of items in the folder. If you want to examine the items with a utility like MFCMAPI, make sure that your Outlook profile is not configured in Exchange cached mode as otherwise you will not see the folder contents.
Skype for Business Compliance Records
In the case of Skype for Business, the same method captures conversations for meetings and personal chats. Skype for Business records the interaction between people in a conversation in a transcript format. You can find the transcripts in the Conversation History folder in the mailbox of each participant. In fact, depending on the length of the conversation and other factors, several versions of a transcript might exist. For eDiscovery purposes, you always look for the most recent version as that holds the most complete record.
Teams Compliance Records
Teams takes a different approach to capture compliance records for conversations. As people communicate in chats and channel conversations, The Microsoft 365 substrate captures Teams compliance records in Exchange Online. The “real” chat data stays in the Teams chat service on Azure Cosmos DB. Some backup vendors incorrectly state that they can backup Teams because their products copy the compliance records stored in Exchange Online. Although the backup preserves the compliance records, the data is not a complete copy of what Teams holds in Cosmos DB.
Compliance records captured for personal chats go the TeamsMessagesData folder in participant mailboxes while items captured for channel conversations are in the same folder in group mailboxes. Teams captures records in phantom mailboxes for messages sent by hybrid users with on-premises mailboxes or guest users.
For example, if you have a conversation in in General channel of the “Planning 2018” team, compliance records are in the TeamsMessagesData folder of the “Planning 2018” group mailbox. If you then have a conversation in the Budget channel in the same team, the records also go into the same folder. In other words, all the compliance records for all channels in a team go into the same folder.
There is nothing wrong with having all the records for a team gathered in one place. The compliance items are safe from interference because clients do not reveal the folder in their user interface. The items are indexed and discoverable, and the most interesting information in a compliance record is likely to be the content.
Figure 1 shows Teams compliance records found by a content search. Three interesting points are evident.
The message type (IM) instructs the search to find Teams messages.
If set, the Add app content for on-premises users checkbox instructs the search to scan the cloud-only mailboxes used to hold compliance records generated by guest and hybrid accounts. If you need to use this capability and the checkbox is not visible, you’ll need to make a support request to have Microsoft expose the checkbox.
Teams no longer stamps the channel name in the subject of compliance items. This makes it more difficult to establish exactly which channel a conversation comes from.
Figure 1: Teams compliance records found by a content search
If you are lucky and the topic includes a title, you see that too. In short, if an investigator wants to understand the ebb and flow of a conversation, they might have to search all channels in the team (manually) using the date and time of a found item to recover all the compliance records for the conversation and be able to see how a discussion developed.
Transcripts versus Individual Records
The format used for compliance records creates another eDiscovery challenge. Because Skype for Business conversations are time-limited (in other words, they finish), the application can generate a complete transcript showing the full context of the conversation. Figure 2 shows an example. If an eDiscovery search uncovered this item, an investigator can easily understand how the conversation develops between the two participants and what they discuss.
Figure 2: Skype for Business Online transcript
Teams conversations are persistent. They are open-ended and can restart at any time, which then means that it is harder to create a transcript like the form used by Skype for Business. Teams therefore captures compliance records as a series of items, one for each contribution. Although the items are fully searchable, the fact that multiple individual items exist for a conversation creates a reassembly challenge for investigators.
Take the example where a search uncovers an interesting item from a Teams conversation. The content of the item might be enough for the investigation, but it is more likely that the investigators need extra information to understand how the conversation developed. They must therefore retrieve items captured before and after the item of interest and then assemble the items in time order to create the kind of transcript available in Skype for Business Online. This is a manual process, unless you have licenses to use Microsoft 365 Advanced eDiscovery, which can reassemble conversations for display.
The problem with manual processes is that they are both expensive and open to challenge in court. To satisfy a judge, it is likely that investigators must prove that they have the correct items (and did not omit any) and present the information in the correct order. Although I know how to use Skype for Business transcripts in legal actions, I have not yet experienced how the legal eagles deal with search results from Teams.
Compliance is Difficult
Generally speaking, compliance is a difficult and costly topic. The growing amount of data accumulated through computer interactions makes it harder for searches to find precisely the right information. On the upside, Teams captures information about conversations that is searchable. The downside is that the transition from Skype for Business Online to Teams might make searching and satisfying lawyers just a bit harder.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}